-inf
デフォルトでは、パラメータリストから最初の項目を「インポートしたい」と思います。 (残りのパラメータは他のコマンドに渡されます。)
私のスクリプトの構造は次のとおりです。
#!/bin/sh
<CODE>
for POSITIONAL_PARAM in "$@"
do
<CODE>
if [ "$POSITIONAL_PARAM" = '-inf' ]
then
<PLUCK $POSITIONAL_PARAM FROM $@>
break
fi
<CODE>
done
<CODE>
some-other-command "$@"
# end of script
これを行うための良い方法はありますか?
ちなみに、私は主に適用される答えに興味がありますが、唯一の適用された/bin/sh
答えにも興味があります/bin/bash
。
答え1
POSIX的に:
for arg do
shift
[ "$arg" = "-inf" ] && continue
set -- "$@" "$arg"
done
printf '%s\n' "$@"
上記のコードは、元のAlmquistシェルを除いて、POSIX以前のシェルでも実行されます(読み取り)。アメリカ)。ループをfor
次のように変更します。
for arg
do
...
done
すべてのシェルで動作が保証されます。
別のPOSIX:
for arg do
shift
case $arg in
(-inf) : ;;
(*) set -- "$@" "$arg" ;;
esac
done
この場合、POSIX以前のシェルで機能するには、最初のエントリを削除する(
必要があります。(pattern)
答え2
-
同様の問題を解決しようとしたときにこれを見つけましたが、オプションではなくすべてのパラメータ(で始まらないパラメータ)を受信した区切り文字まですべて処理したかったです--
。処理されたパラメータを取り出し、残りのパラメータは指定された順序でそのままにしようとします。
これが私が思いついたものです。
parse=true
for arg do
[ "$arg" == '--' ] && parse=false
shift
if $parse && [ "${arg:0:1}" != '-' ]
then
echo handling $arg
else
set -- "$@" "$arg"
fi
done