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
相关产品推荐
相关产品推荐

