Выполнение кода в операторе if (Bash) - PullRequest
5 голосов
/ 30 мая 2011

Новый вопрос:

Я не могу этого сделать (Ошибка: line 2: [: ==: unary operator expected):

if [ $(echo "") == "" ]
then
    echo "Success!"
fi

Но это прекрасно работает:

tmp=$(echo "")
if [ "$tmp" == "" ]
then
    echo "Success!"
fi

Почему?

Оригинальный вопрос:

Можно ли получить результат команды внутри оператора if?

Я хочу сделать что-то вроде этого:

if [ $(echo "foo") == "foo" ]
then
    echo "Success!"
fi

В настоящее время я использую этот обходной путь:

tmp=$(echo "foo")
if [ "$tmp" == "foo" ]
then
    echo "Success!"
fi

1 Ответ

6 голосов
/ 30 мая 2011

Краткий ответ: да - Вы можете оценить команду внутри условия if. Единственное, что я хотел бы изменить в вашем первом примере, это цитата:

if [ "$(echo foo)" == "foo" ]
then 
    echo "Success"'!'
fi
  • Обратите внимание на забавную цитату для '!'. Это отключает специальное поведение ! внутри интерактивного сеанса bash, что может привести к неожиданным результатам для вас.

После вашего обновления ваша проблема становится понятной, и изменение в кавычках фактически решает ее:

Оценка $(...) происходит до оценки if [...], поэтому, если $(...) оценивает пустую строку, [...] становится if [ == ""], что является недопустимым синтаксисом.

Способ решить эту проблему - использовать кавычки вне выражения $(...). Именно здесь вы можете столкнуться с трудной проблемой цитирования внутри цитаты, но я перенесу эту проблему на другой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...