getopts
「名前のない」引数が名前の付いた引数の前にある場合、なぜすべての引数を無視するように見えるのかを理解しようとしています。
http://wiki.bash-hackers.org/howto/getopts_tutorialの例を使用して、
#!/bin/bash
while getopts ":a" opt; do
case $opt in
a)
echo "-a was triggered!" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
そして結果を観察する:
$ ./opt_test
$ ./opt_test -a
-a was triggered!
$ ./opt_test -a -f
-a was triggered!
Invalid option: -f
$ ./opt_test a -a -f
$ ./opt_test a -a
$ ./opt_test a -f
$ ./opt_test lala -f
$
したがって、名前のない引数(ダッシュのない引数)を前に付けると、getopts
すべての引数が無視されるように見えます。
これはなぜですか、どうすれば回避できますか?そんなことをプログラムで捉えて、使い方画面を印刷できるようにしたいと思います。