有没有办法评估布尔表达式并将其值赋给变量?
在大多数脚本语言中,有评估方法,例如
//PHS
$found= $count > 0 ;  //evaluates to a boolean values
我想用类似的方式来评估bash:
BOOL=[ "$PROCEED" -ne  "y" ] ; 
这不起作用,并尝试其他方式,但无法获得布尔值.有没有办法在没有使用IF的情况下这样做?
Mat*_*Mat 35
你可以这样做:
[ "$PROCEED" = "y" ] ; BOOL=$?
如果您正在使用set -e,您可以使用:
[ "$PROCEED" = "y" ] && BOOL=0 || BOOL=1
BOOL当匹配时设置为零,就像典型的Unix返回码一样.看起来有点奇怪.
这不会引发错误,并且您确定之后$BOOL将会是0或1,无论之前包含什么.
And*_*rew 16
我会建议:
[ "$PROCEED" = "y" ] || BOOL=1
这有利于检查$?即使set -e打开也能正常工作.(请参阅编写健壮的shell脚本.)
小智 6
与其... && 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
| 归档时间: | 
 | 
| 查看次数: | 19005 次 | 
| 最近记录: |