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

Bash中如何通过单个参数传递数量可变的多个值

实现方案

有两种常用的实现方式,你可以根据使用习惯选择:

方案1:多次使用 -i 参数传值(最符合POSIX规范)

getopts原生支持重复调用同一个参数,你只需要把接收到的所有值存到数组里即可,修改后的代码如下:

usage() { echo "Usage: $0 [-i <string>]" 1>&2; exit 1; }

# 初始化数组存储所有-i参数的值
i_values=()

while getopts ":i:" o; do
    case "${o}" in
        i)
            # 每次遇到-i参数就把值追加到数组中
            i_values+=("${OPTARG}")
            ;;
        *)
            usage
            ;;
    esac
done
shift $((OPTIND-1))

# 后续使用时直接遍历数组即可
echo "收到的所有-i参数值:"
for val in "${i_values[@]}"; do
    echo "- ${val}"
done

使用方式示例:

./your_script.sh -i val1 -i val2 -i val3

这种方式不需要额外处理分隔符,不会因为值里包含特殊字符出现解析错误,是最推荐的方案。

方案2:单个-i参数传入多值,用分隔符拆分

如果你习惯用./script.sh -i "val1,val2,val3"这种传入方式,可以自行拆分参数值:

usage() { echo "Usage: $0 [-i <string>]" 1>&2; exit 1; }

while getopts ":i:" o; do
    case "${o}" in
        i)
            # 按逗号拆分存入数组,你可以换成空格、竖线等其他分隔符
            IFS=, read -r -a i_values <<< "${OPTARG}"
            ;;
        *)
            usage
            ;;
    esac
done
shift $((OPTIND-1))

注意:这种方式要确保传入的值里不包含你选定的分隔符,否则会出现拆分错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:15:03