オプションの場合は、$ @からパラメータを削除してください。

オプションの場合は、$ @からパラメータを削除してください。

渡されたパラメータを繰り返す必要があるスクリプトがあります。パラメータがで始まる場合は、-それを文字列に入れてoptsからインポートする必要があります$@

opts=""
for arg in "$@"
do
    if [[ "$arg" == -* ]]; then
        opts="${opts} ${arg}"
        # remove arg from $@ ??
    fi
done

echo $@
echo $args

arg渡されたパラメータ配列から削除するには$@

答え1

never で始まるオプションが-引数を取らない場合は、次のようにします。opts 大量に:

for a; do
   shift
   case $a in
   -*) opts+=("$a");;
   *) set -- "$@" "$a";;
   esac
done

(文字列にしたい場合は、にopts+=("$a")変更してください。スニペットは標準シェルで機能します。)opts="$opts$a "opts

答え2

bash、ksh、zshから拡張すると、次から始まるすべてのパラメータがクリアされます-

echo "${@##-*}"

そうではありません。削除するパラメータを空にしておくだけです。

-ただし、空白と改行を処理できる一方で開始しないパラメータのリストを取得するのはかなり困難です。

単純なループを使用する方が良いです。

unset args opts;
for a; do
    if [[ $a == [-]* ]]; then
        opts+=("$a");
    else 
        args+=("$a");
    fi;
done;

printf '<%s> ' "${args[@]}"; echo;
printf '<%s> ' "${opts[@]}"; echo;

関連情報