シェルスクリプトのargs配列から$*を割り当てる

シェルスクリプトのargs配列から$*を割り当てる

シェルパラメータを繰り返し、不要なパラメータを配列でフィルタリングした後、配列を再割り当てしたいと思います$*

-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シェルを使用すると仮定すると、これは、つまり配列の最初の要素$argsと同じです。${args[0]}args

位置引数のリストを配列値に設定するには、args次のようにします。

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

この"${args[@]}"ように正確に引用する必要があります。そうしないと、配列の個々の要素がシェルによって複数の単語とファイル名に分割される可能性があります。"$*"(単一引用符で囲まれた文字列)または(個別に引用符で囲まれた文字列のリスト)を使用する場合でも、"$@"同じ理由で引用符を使用する必要があります。

また関連:


zshシェルでは、set -- $args位置引数リストを配列の要素リストに正しく設定できますargs

おすすめ記事