aba*_*ter 0 bash shell conditional if-statement
我有以下脚本:
a=$1
b=$2
if [ ! a ]; then
echo "a=$a"
elif [ b ]; then
echo "b=$b"
fi
Run Code Online (Sandbox Code Playgroud)
这是我可以称之为的四种可能方式:
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
Run Code Online (Sandbox Code Playgroud)
我原以为:
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
Run Code Online (Sandbox Code Playgroud)
我显然不明白bash elif的陈述.有人可以开导我吗?
另外,一个interwebs,bash脚本教程有时会使用[[...]]但主要是[...].我看到很多SO评论者说你应该使用[[...]].当一个人比另一个好的时候,有经验法则吗?
你犯了两个错误:
a,而不是字符"a"; 所以用$a.所以你想要这样的东西:
if [ "$a" = "true" ]; then
echo "a=$a"
elif [ "$b" = "true" ]; then
echo "b=$b"
fi
Run Code Online (Sandbox Code Playgroud)
我实施了两项建议:
更多细节
bash不知道布尔值.你的考试:
if [ ! a ];
Run Code Online (Sandbox Code Playgroud)
因为你问bash会不会失败:字符"a"是空的吗?这与以下相同:
if [ "" = "a" ]
Run Code Online (Sandbox Code Playgroud)
假设您确实使用了$a(变量):
if [ ! $a ]
Run Code Online (Sandbox Code Playgroud)
这仍然是假的; 因为这相当于:
if [ "" = "$a" ]
Run Code Online (Sandbox Code Playgroud)
无论a = true还是a = false(因为a永远不是空字符串),这将永远不会成立
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |