シェルついでにgetopsの話。getoptsを使うと、こんな感じでオプションのパーサを楽に書ける。
opt_a=上の例だと-aと-bが引数なし、-cと-dが引数ありのオプション。-abc ARGのように、複数のオプションをまとめて指定しても、きちんと解釈してくれる。引数ありのオプションは、-d ARGでも-dARGでもOK。
opt_b=
opt_c=
opt_d=
while getopts ‘abc:d:’ opt; do
case $opt in
a|b)
eval “opt_$opt=1”;;
c|d)
eval “opt_$opt=’$OPTARG’”;;
esac
done
shift `expr $OPTIND - 1`
そんな便利なgetoptsの最大の弱点は、標準で備わっている保証がないこと。ただbashならgetoptsはbuilt-in化されているので、多少の可搬性を犠牲にしてでもgetoptsを使いたいときはshebangで
#!/bin/bashと明示している。
ashでもbuilt-in化できることはできるが、ビルド時に無効にもできるので、ashならgetoptsが使えるという保証はできない。PCならともかく、組み込みだと切られているケースもあるかも。
0 件のコメント:
コメントを投稿