You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:25:54