2016-07-21 5 views
0

Как проверить, $dir равно "string"?Как сравнить папку с строкой

Я пытаюсь это:

array=(/path/to/folders/*) 

for dir in "${array[@]}"; do 
    if["${dir}" == "/path/to/folders/subfolder"]; then 
    do something... 
    fi 
done 
+0

Используйте [shellcheck.net] (http://shellcheck.net) для синтаксиса - проверьте свой код оболочки; в данном случае вы увидите: «Вам нужно пространство после [и до]». – mklement0

ответ

3

В оболочке пространство имеет важное значение. Заменить:

if["${dir}" == "/path/to/folders/subfolder"]; then 

с:

if [ "${dir}" = "/path/to/folders/subfolder" ]; then 

Примечания:

  1. В оболочке [ это имя команды. Он не должен быть объединен с другими строками.

  2. ] является обязательным окончательным аргументом [. Он также не должен быть объединен с другими строками.

  3. Хотя Баш принимает либо == или =, = является совместимым оператор POSIX для струнного равенства внутри [...].

1

Как ни странно это может показаться, [ фактически команда, также известный как команда test. Попробуйте:

type [ 

Вы получаете:

[ is a shell builtin 

Это историческое. Синтаксис для оператора if на самом деле ifcompound_list, скобки на самом деле не являются частью инструкции if, хотя, конечно, именно там они обычно используются.

Одним из общих принципов синтаксиса оболочки является то, что токены разделены пробелом. Поэтому параметры команды [ должны быть отделены от нее пробелами, так как вам нужно пространство в ls -l (ls-l не будет работать).

Кроме того, параметр окончательного (самый правый) из [ должен быть ]. Опять же, пустое пространство должно отделить это, чтобы сделать его токеном самостоятельно.

Итак:

if [ "$dir" == "/path/to/folders/subfolder" ] 

В этом примере мы передаем 4 параметра в команде [.

{ } были излишними, но они не причиняли вреда, если вам нравится печатать { }.

0

Хотя

if [ "${dir}" = "/path/to/folders/subfolder" ]; then 

в [ this ] отвечает на ваш вопрос, я хотел бы предложить вам использовать

if [[ "${dir}" == "/path/to/folders/subfolder" ]]; then 

вместо потому что [[..]] формы поддерживает соответствие регулярного выражения (с оператором =~). См. Это [ article ] для более подробной информации.

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