#bash
#bash
Вопрос:
У меня есть такое выражение:
if [[ $s == *Mar* ]]; then "match"; else "not"; fi;
Как присвоить его значение переменной?
синтаксис подстановки команд не работает, потому что bash пытается вычислить результат выражения:
x=$(if [[ $s == *Mar* ]]; then "match"; else "not"; fi;)
выдает ошибку:
-bash: match: command not found
Итак, в основном я хочу сказать bash вычислить выражение, но не обрабатывать вывод как команду.
Как мне это сделать?
Комментарии:
1. Вы путаете причину и следствие.
2. @IgnacioVazquez-Abrams, не могли бы вы уточнить?
3. В этом нет необходимости; это уже описано ниже.
Ответ №1:
if [[ $s == Mar ]]; then "match"; else "not"; fi
это не выражение; это команда. Вы могли бы превратить его в команду, которая выводит либо match
или not
, вставив соответствующие echo
команды, а затем захватить выходные данные с помощью обратных меток или $()
.
Но это было бы бессмысленно косвенным. Почему бы просто не
if [[ $s == Mar ]]; then
x="match"
else
x="not"
fi
?
Комментарии:
1. Я согласен с текущими комментариями и этим сообщением. Чтобы сделать явным то, что сказал Хеннинг, x=$( if [[ $s == «Mar» ]] then echo «match» ; else echo «not» ; fi ) сделает то, что вы просили. Наконец, вы можете изучить
eval
команду, поскольку она также поддерживает «вычисление результата выражения». Удачи.2. @shellter, ваш ответ — тот, который я искал. Не могли бы вы добавить его в качестве ответа, чтобы я мог его принять?
3. Спасибо, но я думаю, что @HenningMakholm ответил на ваш вопрос. Пожалуйста, отдайте ему должное 🙂 Удачи всем.
4. @Sali, итак, ваш реальный вопрос: «Как я могу написать это самым неэффективным и оскорбительным способом»? В этом случае вам, вероятно, следует переписать предложение шеллтера использовать
echo "match" | cat
вместо простогоecho "match"
. Так гораздо более предприимчиво.5. @HenningMakholm, ваш ответ показывает, как это обычно делается / должно выполняться в скрипте bash. И это нормально. Мой вопрос был больше похож на то, как я могу присвоить результат переменной. Мои концепции bash не ясны, и последующее обсуждение, основанное на вашем ответе, помогло мне хорошо понять концепцию. Спасибо за это.