我有以下脚本:
a=$1
b=$2
if [ ! a ]; then
echo "a=$a"
elif [ b ]; then
echo "b=$b"
fi
这是我可以称之为的四种可能方式:
balter$ bash eliftest.sh true true
b=true
balter$ bash eliftest.sh true false
b=false
balter$ bash eliftest.sh false true
b=true
balter$ bash eliftest.sh false false
b=false
我原以为:
b=true # !a evaluates to false but b is true
<nothing> # !a evaluates to false and b is also false
a=false # !a evaluates to true and if short circuits
a=false # !a evaluates to true and if short circuits
我显然不了解bash elif的陈述。有人可以开导我吗?
另外,一个interwebs,bash脚本教程有时会使用[[...]]
但主要是[...]
。我看到很多SO评论者说你应该使用[[...]]
。当一个人比另一个好的时候有经验法则吗?
答案 0 :(得分:6)
你犯了两个错误:
a
,而不是字符&#34; a&#34 ;;所以请使用$a
。所以你想要这样的东西:
if [ "$a" = "true" ]; then
echo "a=$a"
elif [ "$b" = "true" ]; then
echo "b=$b"
fi
我实施了两项建议:
更多详情
bash不知道布尔值。你的考试:
if [ ! a ];
因为你问bash,总会失败:是字符&#34; a&#34;空?这与:
相同if [ "" = "a" ]
假设你确实使用了$a
(变量):
if [ ! $a ]
这仍然是假的;因为这相当于:
if [ "" = "$a" ]
无论a = true还是a = false(因为a永远不是空字符串),它永远不会成立
答案 1 :(得分:-1)
避免括号。试试这个:
a=$1
b=$2
if ! $a
then
echo "a=$a"
elif $b
then
echo "b=$b"
fi