有没有办法评估布尔表达式并将其值赋给变量?
在大多数脚本语言中,有评估方法
//PHS
$found= $count > 0 ; //evaluates to a boolean values
我想用类似的方式在bash中进行评估:
BOOL=[ "$PROCEED" -ne "y" ] ;
这不起作用并尝试其他方式但无法获得布尔值。有办法吗? 这样做没有使用IF?
答案 0 :(得分:29)
你可以这样做:
[ "$PROCEED" = "y" ] ; BOOL=$?
如果您正在使用set -e
,则可以改为使用:
[ "$PROCEED" = "y" ] && BOOL=0 || BOOL=1
当匹配时, BOOL
设置为零,就像典型的Unix返回码一样。看起来有点奇怪。
这不会引发错误,并且您确定$BOOL
之后将为0或1,无论之前包含的是什么。
答案 1 :(得分:15)
答案 2 :(得分:5)
分配:
found=$((count > 0))
答案 3 :(得分:5)
使用... && BOOL=0 || BOOL=1
和true
会更清楚,而不是使用当前接受的答案中建议的false
。
并且由于这个问题是专门针对bash的(不是POSIX shell),因此最好使用[[
而不是[
(例如,参见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