如何在Bash脚本中移除指定的位置参数?
解决Bash脚本移除指定位置参数的问题
要实现移除指定参数并保留剩余参数的位置结构,之前的echo方案只会把参数拼接成字符串,没法维持$1、$2这种独立的位置参数。正确的做法是用数组收集需要保留的参数,再更新位置参数:
示例脚本
#!/bin/bash # 初始化空数组存储保留的参数 filtered_args=() # 遍历所有传入参数,跳过要移除的"b" for arg in "$@"; do if [[ "$arg" != "b" ]]; then filtered_args+=("$arg") fi done # 更新位置参数为过滤后的数组 set -- "${filtered_args[@]}" # 验证效果(可选) echo "\$1 = '$1'" echo "\$2 = '$2'"
测试效果
- 执行
./script.sh a b c,输出:$1 = 'a' $2 = 'c' - 执行
./script.sh "a 1" b "c 2",输出:$1 = 'a 1' $2 = 'c 2'
原理说明
- 用数组
filtered_args逐个收集不需要移除的参数,能完整保留每个参数的原始格式(包括含空格的参数)。 set -- "${filtered_args[@]}"会把数组中的元素重新设置为脚本的位置参数,后续就能正常用$1、$2等调用这些参数。
内容的提问来源于stack exchange,提问作者Marshall Jobe
相关产品推荐
相关产品推荐

