#bash #if-statement
#bash #if-оператор
Вопрос:
Я хочу сделать что-то вроде этого:
if [ (! true) -o true ]
then
echo "Success!"
else
echo "Fail!"
fi
Но это выдает ошибку ( -bash: syntax error near unexpected token '!'
)
Возможно ли сделать что-нибудь подобное?
Ответ №1:
Проблема здесь в том, что [
это простая команда сборки в bash (другой способ записи test
), которая может интерпретировать только те параметры, которые она получает, в то время как (
является символом оператора. Синтаксический анализ операторов происходит перед выполнением команды.
Чтобы использовать (
и )
с [
, вы должны заключить их в кавычки:
if [ ( ! true ) -o true ]
then
echo "Success!"
else
echo "Fail!"
fi
или
if [ '(' ! true ')' -o true ]
then
echo "Success!"
else
echo "Fail!"
fi
[[ ... ]]
Конструкция — это специальная синтаксическая конструкция, которая не имеет синтаксических ограничений обычных команд, поскольку она работает на другом уровне. Таким образом, здесь вам не нужно заключать скобки в кавычки, как сказал Игнасио. (Кроме того, здесь вы должны использовать amp;amp;
and ||
вместо -a
и -o
.)
Ответ №2:
Вы не можете этого сделать, но вы можете сделать это:
if [ ! true ] || [ true ]
Как общее правило, никогда не пытайтесь использовать опции -a
или -o
для [
.