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