| 総合手引 | セクション 1 | English | オプション |
args=getopt abo: $*
# getopt abo: "$@" を使ってはなりません。
# 以下の set コマンドとは異ったように、引数を解釈してしまうためです。
if [ $? -ne 0 ]
then
echo 'Usage: ...'
exit 2
fi
set -- $args
# set コマンドを、バッククォートした getopt と共に、直接使用できません。
# getopt の終了コードが set のもので隠されてしまうからです。
# set の終了コードは 0 と定義されています。
for i
do
case "$i"
in
-a|-b)
echo flag $i set; sflags="${i#-}$sflags";
shift;;
-o)
echo oarg is "'"$2"'"; oarg="$2"; shift;
shift;;
--)
shift; break;;
esac
done
echo single-char flags: "'"$sflags"'"
echo oarg is "'"$oarg"'"
このコードは、以下の (コマンド指定の) 例のどれでも同じように 受け入れます。
cmd -aoarg file file cmd -a -o arg file file cmd -oarg -a file file cmd -a -oarg -- file file
空白文字やシェルのメタキャラクタを含んだ引数は、一般に元のまま 残りません。 これは直すのは簡単に思われますが、そうではありません。 getopt や本マニュアルの使用例を直そうとする人は、 FreeBSD 中のこのファイルの履歴を確認すべきです。
不正なオプションに対するエラーメッセージは、 getopt を実行するシェルプロシージャから返すのではなく、 getopt から返されます。 これも直すのは困難です。
シェルオプションの値を分離すること無く、引数を指定するための set コマンドを使うためのとっても良い方法は、シェルのバージョンを 変えることです。
引数を部分的に正しく解釈するために、 各シェルスクリプトは (前記使用例のような) 複雑なコードを持つ必要があります。 より良い getopt 的ツールは、複雑な部分の大半をツールの中に移動し、 クライアントのシェルスクリプトを単純にするものでしょう。
| GETOPT (1) | April 3, 1999 |
| 総合手引 | セクション 1 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
| “ | Ken Thompson was once asked by a reporter what he would have changed about Unix if he had it all to do over again. His answer: “I would spell creat with an ‘e.'” | ” |