Bash 如何删除或过滤带有值的参数?

tom*_*omy 3 bash shell

我想创建一个调用另一个脚本或命令作为包装器的 BASH 脚本。调用参数应该被收集传递,但有一个例外。如何过滤特殊参数名称值对?

例如,当我使用参数 count 调用第一个脚本时X=$#

$ ./foo.sh -v --first val1 ... --argname 'value with spaces' ... --last val3
Run Code Online (Sandbox Code Playgroud)

然后它应该使用新的参数 count 调用第二个命令或脚本X'=X-2

$ ./bar.sh -v --first val1 ... --last val3
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 7

您可能有一些原因希望在函数中进行删除,但您的尝试似乎过于复杂、不安全和不透明,因为它不仅仅过滤数组。

args=("$@")
for ((i=0; i<"${#args[@]}"; ++i)); do
    case ${args[i]} in
        --argname) unset args[i]; unset args[i+1]; break;;
    esac
done
./bar.sh "${args[@]}"
Run Code Online (Sandbox Code Playgroud)