Bash中如何在布尔表达式使用$#?范围判断无预期结果的原因
问题原因分析
你的脚本逻辑存在根本性矛盾:$# < 2 && $# > 3 要求参数数量同时满足小于2和大于3,这在数学上不可能成立,无论传入多少参数,这个条件都永远为假,自然不会输出"error"。
当你运行./s 1 2 3 4 5 6时,$#的值是6,6大于3但不小于2,&&运算符要求两边条件都为真才会执行后续代码,所以条件不触发。
修正方案
如果你想判断参数数量不在2到3的范围内(即参数太少或太多),需要把逻辑运算符从&&改成||(逻辑或),只要满足其中一个条件就执行错误提示:
#!/bin/bash if [[ $# < 2 || $# > 3 ]]; then echo "error" fi
另外,在Bash中进行数值比较,更规范的写法是使用-lt(小于)、-gt(大于)这类专用的数值比较运算符,避免和字符串比较的</>混淆(虽然这里$#是数字,结果可能一致,但专用写法可读性更强):
#!/bin/bash if [[ $# -lt 2 || $# -gt 3 ]]; then echo "error" fi
内容的提问来源于stack exchange,提问作者StudentOrint
相关产品推荐
相关产品推荐

