2015-11-09 15 views
0

Я пытаюсь:Как сравнить переменные, содержащие двойные кавычки

FOO='Hi" a/b/c:' 
BAR='hello' 

if [ "$FOO" == "$BAR" ] ; then 
    echo "yes" 
fi 

Однако то, что я получаю ошибку из-за того, что приходит после того, как «в $ FOO Как я могу спасаясь от.» В переменной? Или иначе заставить bash реально сравнивать переменные как есть?

+5

Невозможно воспроизвести. Какая ошибка, * точно *? – Biffen

+1

Вы используете 'if [$ FOO == $ BAR];' в вашем реальном коде? –

+0

У вас есть '#!/Bin/bash' вверху? Если нет, какова ваша оболочка? Это может быть не баш. –

ответ

3

У вас не работает скрипт под bash. Баш согласился бы с нестандартным синтаксисом. Другие оболочки могут отклоняться. Например, сравните Баш и тире:

$ bash script.sh 
$ dash script.sh 
script.sh: 4: [: Hi" a/b/c:: unexpected operator 

Как показано здесь, ваш скрипт работает под Баш, но не тире. Проблема заключается в неожиданном операторе . Это относится к ==, который не является POSIX. Растворы либо (а) запустить его под Баш, или (б) заменить:

if [ "$FOO" == "$BAR" ] ; then 

с:

if [ "$FOO" = "$BAR" ] ; then 

Внутри [...], символ = стандартный символ, используемый для строки равенства.

Смежные вопросы