Bash脚本中$#-1与1-$#的运算差异咨询
$#-1 和 1-$# 在Bash算术表达式中的差异 这两个算术表达式的结果完全相反,是互为相反数的关系:
$#代表当前脚本或函数接收到的参数总个数$#-1是参数总数减1,比如传入3个参数时结果为21-$#是1减去参数总数,同样传入3个参数时结果为-2
结合你的代码场景来看,你需要计算除第一个参数外的剩余参数数量,所以显然应该用$#-1——这个结果才是有效的剩余参数个数,能对应你想处理的第2到第N个参数的范围。如果误用1-$#,得到的负数完全无法作为范围上限使用。
另外提一句你代码里的一个问题:Bash中[2..${count}]的写法是错误的,方括号属于通配符匹配语法,不是范围展开。而且就算改成大括号{2..$count}也不会生效,因为Bash的大括号展开不支持变量替换。如果要遍历第2到最后一个参数,有两种更实用的写法:
方法1:C风格for循环
if [ -n "$@" ]; then name=$1 for ((a=2; a<=$#; a++)); do # 通过${!a}获取第a个位置的参数 current_param=${!a} # 这里写你的处理逻辑 echo "处理参数:$current_param" done fi
方法2:跳过第一个参数后遍历剩余参数
if [ -n "$@" ]; then name=$1 shift # 移除第一个参数,$@现在只剩原来的$2、$3... for a in "$@"; do # 这里的a直接是剩余的参数 echo "处理参数:$a" done fi
内容的提问来源于stack exchange,提问作者Michal D.
相关产品推荐
相关产品推荐

