Каков синтаксис сравнения подстроки одной строки со строковой переменной в bash?

Я пытаюсь сравнить подстроку одной строковой переменной с целой переменной, и она всегда оказывается ложной.

COMP='<'
if [[ '${SNIP:0:1}' = '$COMP' ]] ;then
  LENG=6
elif [[ '${SNIP:1:1}' = '$COMP' ]] ;then
  LENG=7
else
  LENG=8
fi
echo $SNIP
echo ${SNIP:0:1}
echo ${SNIP:1:1}
echo $COMP
echo $LENG

Я также пробовал просто сравнивать подстроки с '‹', но это всегда возвращает true.

Я ожидаю, что результат будет

3<a
<
<
7

но выход есть

3<a
<
<
8

и я не знаю, что портит. Пожалуйста помоги. Спасибо.


person xehcimal    schedule 24.07.2019    source источник
comment
Попробуйте использовать двойные кавычки " вместо одинарных ' при использовании переменных.   -  person Matthias    schedule 25.07.2019
comment
Хорошо, вау, да, это так. Спасибо большое   -  person xehcimal    schedule 25.07.2019


Ответы (1)


Просто используйте двойные кавычки:

COMP='<'
if [[ "${SNIP:0:1}" = "$COMP" ]] ;then
  LENG=6
elif [[ "${SNIP:1:1}" = "$COMP" ]] ;then
  LENG=7
else
  LENG=8
fi
echo $SNIP
echo ${SNIP:0:1}
echo ${SNIP:1:1}
echo $COMP
echo $LENG

Одинарные кавычки ничего не интерполируют, а двойные будут.

https://stackoverflow.com/a/6697781/344480

person Matthias    schedule 24.07.2019