我想创建一个调用另一个脚本或命令作为包装器的 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)
您可能有一些原因希望在函数中进行删除,但您的尝试似乎过于复杂、不安全和不透明,因为它不仅仅过滤数组。
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)