在 shell 脚本中从 args 数组分配 $*

在 shell 脚本中从 args 数组分配 $*

迭代 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

假设您使用的是bashshell,$args则 相当于${args[0]},即数组的第一个元素args

要将位置参数列表设置为数组的值args,您可以使用

set -- "${args[@]}"

请注意,"${args[@]}"必须完全像这样引用,否则数组的各个元素可能会被 shell 分割成多个单词并进行文件名通配。如果您使用"$*"(单引号字符串)或"$@"(单独引号字符串的列表),则出于同样的原因应使用引号。

还相关:


zshshell 中,set -- $args可以正确地将位置参数列表设置为数组中的元素列表args

相关内容