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

如何在Bash中使用$*但忽略首个特殊参数?

解决方法

要忽略第一个参数并遍历剩余参数,bash里有几种实用的写法:

方法1:用shift命令移除第一个参数

shift命令会把参数列表整体左移一位,原本的$2变成$1、$3变成$2,后续再用$@就只会包含剩下的参数。修改后的脚本如下:

sum=0
# 移除第一个参数,让后续参数顺位前移
shift
for i in "$@"
do
    sum=$(($sum + $i))
done
echo $sum

建议用"$@"代替$*,因为"$@"会保留参数里的空格(如果参数包含空格的话),避免被错误拆分。

方法2:直接从第二个参数开始遍历

如果不想改动原参数列表,可以用数组切片语法,直接取从第二个参数开始的所有内容:

sum=0
# ${@:2} 表示取第2个及之后的所有参数
for i in "${@:2}"
do
    sum=$(($sum + $i))
done
echo $sum

原脚本的问题说明

你原来的脚本有两个明显问题:

  1. $*包含了所有参数,循环会把第一个参数也纳入计算,如果第一个参数是"+",执行加法时会因类型错误报错
  2. 循环里的[ $1 = "+" ]是一直判断第一个参数,而非当前循环的变量$i,逻辑不符合需求

如果你的需求是第一个参数作为运算符(比如"+"表示求和),可以调整成这样:

sum=0
operator=$1
shift
for i in "$@"
do
    if [ "$operator" = "+" ]; then
        sum=$(($sum + $i))
    fi
done
echo $sum

内容的提问来源于stack exchange,提问作者LocalHandsomeEmo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:25:09