Не похоже, что удар имеет эквивалентную функцию, по крайней мере, не со всеми качествами, которые Вы описываете. Если Вы ищете "лучше всего обоих миров", zsh имеет sched
функции.
Я действительно понимаю, что это могло бы быть столь же бесполезно как другие ответы все же.
Если значение $FOO
отдельное слово, которое не содержит подстановочный символ \[*?
, затем эти два идентичны.
Если $FOO
является неприсвоенным или пустой, или больше чем одно слово (т.е. содержит пробел или $IFS
), затем неупомянутая версия является синтаксической ошибкой. Если это, оказывается, просто правильная последовательность слов (такой как 0 -eq 0 -o false
), результат мог быть произвольным. Поэтому это - хорошая практика, чтобы всегда заключить переменные в кавычки в сценариях оболочки.
Кстати, "true"
не должен быть заключен в кавычки.
Проиллюстрировать, какие проблемы это могло бы вызвать, здесь несколько примеров.
Скажем, у нас есть две переменные следующим образом:
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", который делает один файл. Надежда я не перепутал Вас с этими примерами.
В этом конкретном случае нет никакого различия.
Однако, если $FOO
содержит пространство или некоторые специальные символы, у Вас будет проблема.
В "$FOO"
случай, это будет использовать переменную всего, для создания соответствия, изолирующего Вас от проблемы свободного пространства.
Однако, если Вы используете $FOO
и существует особый случай, на который это будет влиять если оператор.