迭代 shell 参数并将不需要的参数过滤到数组中后,我想将数组分配回$*
.
例如,在下面的脚本中,我想删除-f java
按顺序排列的参数,并将其余参数存储在args
数组中。有没有办法将过滤后的参数分配回$*
?
我正在尝试这样做set --${*} $args
,但它只采用第一个参数而不是整个数组。
如果我通过了
$ .test.sh arg1 arg2 -f java7 arg3
arg1 arg2 agr3
while (( $# )); do
if [[ $1 = "-f" ]] && [[ $2 = "java7" ]]; then
unset USE_JAVA8
JAR=signals.jar
echo "USE_JAVA8 Flag is OFF running Signal on java7"
shift 2
continue
fi
args+=( "$1" )
shift
done
set --${*} $args
echo $*
答案1
假设您使用的是bash
shell,$args
则 相当于${args[0]}
,即数组的第一个元素args
。
要将位置参数列表设置为数组的值args
,您可以使用
set -- "${args[@]}"
请注意,"${args[@]}"
必须完全像这样引用,否则数组的各个元素可能会被 shell 分割成多个单词并进行文件名通配。如果您使用"$*"
(单引号字符串)或"$@"
(单独引号字符串的列表),则出于同样的原因应使用引号。
还相关:
在zsh
shell 中,set -- $args
可以正确地将位置参数列表设置为数组中的元素列表args
。