Подтвердить что ты не робот

Bash boolean выражение и его присвоение значения

Есть ли способ оценить булевское выражение и присвоить его значение переменной?

В большинстве языков сценариев есть способ оценить, например,

//PHS
$found= $count > 0 ;  //evaluates to a boolean values

Мне нужен аналогичный способ для оценки в bash:

BOOL=[ "$PROCEED" -ne  "y" ] ; 

Это не работает и не используется другим способом, но не может получить логическое значение. Есть ли способ  делать это БЕЗ использования IF?

4b9b3361

Ответ 1

Вы можете сделать:

[ "$PROCEED" = "y" ] ; BOOL=$?

Если вы работаете с set -e, вы можете использовать вместо этого:

[ "$PROCEED" = "y" ] && BOOL=0 || BOOL=1

BOOL устанавливается в ноль, когда есть совпадение, чтобы действовать как типичные коды возврата Unix. Выглядит немного странно.

Это не приведет к ошибкам, и вы уверены, что $BOOL будет либо 0, либо 1 потом, независимо от того, что оно содержало раньше.

Ответ 3

Назначение:

found=$((count > 0))

Ответ 4

Вместо использования ... && BOOL=0 || BOOL=1 ... && BOOL=0 || BOOL=1 предложено в принятом в настоящее время ответе, более понятно использовать true и false.

А поскольку этот вопрос касается конкретно bash (а не оболочки POSIX), также лучше использовать [[ вместо [ (см., Например, 1 и 2)), что позволяет использовать == вместо =.

Так что если бы вам пришлось использовать однострочник для чего-то подобного в bash, было бы лучше следующее:

[[ "$PROCEED" == "y" ]] && should_proceed=true || should_proceed=false

Затем вы можете использовать производную переменную эргономично в логических контекстах...

if $should_proceed; then
  echo "Proceeding..."
fi

... в том числе и с ! оператор:

if ! $should_proceed; then
  echo "Bye for now."
  exit 0
fi