Как мне вычислить выражение в bash и присвоить значение переменной?

#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 не ясны, и последующее обсуждение, основанное на вашем ответе, помогло мне хорошо понять концепцию. Спасибо за это.