Что такое шаблон .gitignore, эквивалентный регулярному выражению (Big | Small) (State | City) - [0-9 ] * \. csv

Основная проблема заключается в том, что вы опустили двойные кавычки вокруг подстановки переменной . Когда вы пишете $ help , в большинстве случаев это не означает «принять значение help », это означает «принять значение help , интерпретировать его как список шаблонов подстановочных знаков, разделенных пробелами, и заменять каждый шаблон списком совпадающих имен файлов, если совпадает хотя бы одно имя файла ».

Если help пусто, [-n $ help] расширяется до списка из трех слов [, -n , ] , поскольку результатом split + glob для пустой строки является пустой список слов. Если в скобках заключено одно слово, условие выполняется, если слово не пусто. -n не пусто, поэтому условие истинно.

Исправление заключается в записи [-n "$ help"] : когда help пусто, это расширяется до списка из четырех слов [, -n , пустое слово, ] . Это применяет оператор -n к пустому слову, и условие ложно.

Альтернативным решением является использование [[-n $ help]] . Двойные скобки - это особый синтаксис с разными правилами синтаксического анализа (тогда как одиночные скобки - это обычная команда с забавным названием). Внутри двойных скобок вы можете опустить двойные кавычки вокруг подстановок переменных в большинстве контекстов, за исключением правой части = , == , ! = ] и = ~ .Вы можете написать [[-n "$ help"]] , если хотите, поэтому вам не нужно запоминать исключения, в которых разрешено оставлять двойные кавычки: просто не забывайте всегда заключать в двойные кавычки подстановки переменных (аналогично подстановкам команд: "$ (foo)" ).

23
01.10.2012, 20:34
0 ответов

Теги

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