基本的に、パラメータリストから最初に出現する-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
にのみ該当する回答にも興味があります。
POSIXly:
for arg do
shift
[ "$arg" = "-inf" ] && continue
set -- "$@" "$arg"
done
printf '%s\n' "$@"
上記のコードは、オリジナルのAlmquistシェル(Read Endnote )を除いて、POSIX以前のシェルでも機能します。 for
ループを次のように変更します。
for arg
do
...
done
すべてのシェルで動作することを保証します。
別のPOSIXの1つ:
for arg do
shift
case $arg in
(-inf) : ;;
(*) set -- "$@" "$arg" ;;
esac
done
これを使用する場合、POSIX以前のシェルで機能させるには、(
の最初の(pattern)
を削除する必要があります。
同様の問題を解決しようとしたときにこの質問を見つけましたが、オプション以外のすべての引数(-
で始まっていないもの)を、受け取った--
セパレータまで処理したいと思いました。処理された引数のみを取り出し、残りの引数はそのままの状態でそのまま残したかったのです。
これが私が思いついたものです。
parse=true
for arg do
[ "$arg" == '--' ] && parse=false
shift
if $parse && [ "${arg:0:1}" != '-' ]
then
echo handling $arg
else
set -- "$@" "$arg"
fi
done