Ответ 1
Короткий ответ да. Вы можете оценить команду внутри условия if
. Единственное, что я изменил бы в первом примере, это цитата:
if [ "$(echo foo)" == "foo" ]
then
echo "Success"'!'
fi
- Обратите внимание на забавную цитату для
'!'
. Это отключает специальное поведение!
внутри интерактивного сеанса bash, что может привести к неожиданным результатам.
После вашего обновления ваша проблема становится ясной, и изменение цитирования фактически решает ее:
Оценка $(...)
происходит до оценки if [...]
, поэтому, если $(...)
оценивает пустую строку, [...]
становится if [ == ""]
, что является незаконным синтаксисом.
Способом решения этого вопроса является наличие кавычек вне выражения $(...)
. Здесь вы можете столкнуться с липкой проблемой цитирования внутри цитаты, но я буду рассматривать этот вопрос по другому вопросу.