Заключите переменную в кавычки в сценарии оболочки “если” оператор

Не похоже, что удар имеет эквивалентную функцию, по крайней мере, не со всеми качествами, которые Вы описываете. Если Вы ищете "лучше всего обоих миров", zsh имеет sched функции.

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

9
15.08.2013, 01:42
3 ответа

Если значение $FOO отдельное слово, которое не содержит подстановочный символ \[*?, затем эти два идентичны.

Если $FOO является неприсвоенным или пустой, или больше чем одно слово (т.е. содержит пробел или $IFS), затем неупомянутая версия является синтаксической ошибкой. Если это, оказывается, просто правильная последовательность слов (такой как 0 -eq 0 -o false), результат мог быть произвольным. Поэтому это - хорошая практика, чтобы всегда заключить переменные в кавычки в сценариях оболочки.

Кстати, "true" не должен быть заключен в кавычки.

6
27.01.2020, 20:07

Проиллюстрировать, какие проблемы это могло бы вызвать, здесь несколько примеров.

Скажем, у нас есть две переменные следующим образом:

FOO="some value"
BAR="some value"

Теперь у нас есть две переменные, содержащие точно ту же строку/значение. Если мы сделали некоторых если операторы для тестирования результата в случае:

if [ $FOO = "$BAR" ]; then echo "match"; else echo "no match"; fi

В этой точке Вы доберетесь bash: [: too many arguments. Неупомянутый $FOO содержит теперь три значения, а именно, '[ , some , value'. [ тестовое ключевое слово не знает, что выполниться, потому что оно ожидает, что первым или вторым аргументом будет оператор.

Когда мы заключаем "$FOO" в кавычки, мы явно говорим if смотреть на правильные значения, где никакое разделение слова не происходит.

Другой пример:

my_file="A random file.txt"
  • выполнение rm $my_file средства, удаляющие 'случайный' 'file.txt', который делает это тремя файлами.
  • выполнение rm "$my_file" удалит "Случайный file.txt", который делает один файл.

Надежда я не перепутал Вас с этими примерами.

3
27.01.2020, 20:07

В этом конкретном случае нет никакого различия.

Однако, если $FOO содержит пространство или некоторые специальные символы, у Вас будет проблема.

В "$FOO" случай, это будет использовать переменную всего, для создания соответствия, изолирующего Вас от проблемы свободного пространства.

Однако, если Вы используете $FOO и существует особый случай, на который это будет влиять если оператор.

0
27.01.2020, 20:07

Теги

Похожие вопросы