Когда следует помещать переменные в кавычки в логических условиях?

Являются ли следующие два логических выражения одинаковыми?

if [ -n $1 ] ; then

if [ -n "$1" ] ; then

Если нет - Когда следует заключать переменную в кавычки?

0
задан 30 August 2012 в 20:56

2 ответа

Вот пример, который должен продемонстрировать разницу

~$ t="alfa beta"
~$ if [ -n $t ] ; then echo OK ; fi 
 bash: [: alfa: binary operator expected
~$ if [ -n "$t" ] ; then echo OK ; fi 
 OK
~$ ls blah*
blah1 blah2 blah3
~$ t="blah*"
~$ if [ -n "$t" ] ; then echo OK ; fi 
 OK
~$ if [ -n $t ] ; then echo OK ; fi
bash: [: too many arguments

Другими словами, при использовании котировок $t расширяется только один раз и в качестве единственного аргумента помещает в кавычки test (][ является лишь псевдонимом к test). Без кавычек она заменяется содержимым $t, а затем снова расширяется .

0
ответ дан 21 October 2019 в 11:51

В условиях test, которые совпадают с условиями [, всегда следует использовать двойные кавычки, иначе команда test может пропустить аргумент, если переменная пуста или неопределена, или иметь слишком много аргументов, если переменная содержит пробелы. В команде bash, однако, безопаснее использовать builtin [[ для условий, которым не нужны кавычки.

0
ответ дан 21 October 2019 в 11:51

Другие вопросы по тегам:

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