Bash布尔表达式及其值赋值

时间:2012-03-28 10:55:51

标签: bash

有没有办法评估布尔表达式并将其值赋给变量?

在大多数脚本语言中,有评估方法

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

我想用类似的方式在bash中进行评估:

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

这不起作用并尝试其他方式但无法获得布尔值。有办法吗?    这样做没有使用IF?

4 个答案:

答案 0 :(得分:29)

你可以这样做:

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

如果您正在使用set -e,则可以改为使用:

[ "$PROCEED" = "y" ] && BOOL=0 || BOOL=1
当匹配时,

BOOL设置为零,就像典型的Unix返回码一样。看起来有点奇怪。

这不会引发错误,并且您确定$BOOL之后将为0或1,无论之前包含的是什么。

答案 1 :(得分:15)

我建议:

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

这比检查$?即使set -e开启时也有效。 (见writing robust shell scripts。)

答案 2 :(得分:5)

分配:

found=$((count > 0))

答案 3 :(得分:5)

使用... && BOOL=0 || BOOL=1true会更清楚,而不是使用当前接受的答案中建议的false

并且由于这个问题是专门针对bash的(不是POSIX shell),因此最好使用[[而不是[(例如,参见12),允许使用==代替=

因此,如果您必须在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