Как проверить, $dir
равно "string"
?Как сравнить папку с строкой
Я пытаюсь это:
array=(/path/to/folders/*)
for dir in "${array[@]}"; do
if["${dir}" == "/path/to/folders/subfolder"]; then
do something...
fi
done
Как проверить, $dir
равно "string"
?Как сравнить папку с строкой
Я пытаюсь это:
array=(/path/to/folders/*)
for dir in "${array[@]}"; do
if["${dir}" == "/path/to/folders/subfolder"]; then
do something...
fi
done
В оболочке пространство имеет важное значение. Заменить:
if["${dir}" == "/path/to/folders/subfolder"]; then
с:
if [ "${dir}" = "/path/to/folders/subfolder" ]; then
Примечания:
В оболочке [
это имя команды. Он не должен быть объединен с другими строками.
]
является обязательным окончательным аргументом [
. Он также не должен быть объединен с другими строками.
Хотя Баш принимает либо ==
или =
, =
является совместимым оператор POSIX для струнного равенства внутри [...]
.
Как ни странно это может показаться, [
фактически команда, также известный как команда test
. Попробуйте:
type [
Вы получаете:
[ is a shell builtin
Это историческое. Синтаксис для оператора if
на самом деле if
compound_list, скобки на самом деле не являются частью инструкции if
, хотя, конечно, именно там они обычно используются.
Одним из общих принципов синтаксиса оболочки является то, что токены разделены пробелом. Поэтому параметры команды [
должны быть отделены от нее пробелами, так как вам нужно пространство в ls -l
(ls-l
не будет работать).
Кроме того, параметр окончательного (самый правый) из [
должен быть ]
. Опять же, пустое пространство должно отделить это, чтобы сделать его токеном самостоятельно.
Итак:
if [ "$dir" == "/path/to/folders/subfolder" ]
В этом примере мы передаем 4 параметра в команде [
.
{ }
были излишними, но они не причиняли вреда, если вам нравится печатать { }
.
Хотя
if [ "${dir}" = "/path/to/folders/subfolder" ]; then
в [ this ] отвечает на ваш вопрос, я хотел бы предложить вам использовать
if [[ "${dir}" == "/path/to/folders/subfolder" ]]; then
вместо потому что [[..]]
формы поддерживает соответствие регулярного выражения (с оператором =~
). См. Это [ article ] для более подробной информации.
Используйте [shellcheck.net] (http://shellcheck.net) для синтаксиса - проверьте свой код оболочки; в данном случае вы увидите: «Вам нужно пространство после [и до]». – mklement0