bash では次のように位置指定されたパラメータを簡単に取得できることがわかっています。
$0
または$1
次のようなフラグ オプションを使用して、各パラメータが何に使用されるかを指定できるようにしたいと思います。
mysql -u user -h host
位置ではなくフラグによって-u param
値と値を取得する最良の方法は何ですか?-h param
ベストアンサー1
この例ではBashの組み込みgetopts
コマンドであり、Google Shell スタイルガイド:
a_flag=''
b_flag=''
files=''
verbose='false'
print_usage() {
printf "Usage: ..."
}
while getopts 'abf:v' flag; do
case "${flag}" in
a) a_flag='true' ;;
b) b_flag='true' ;;
f) files="${OPTARG}" ;;
v) verbose='true' ;;
*) print_usage
exit 1 ;;
esac
done
注: 文字の後にコロンが続く場合 (例f:
)、そのオプションには引数があると想定されます。
使用例:./script -v -a -b -f filename
getopts を使用すると、一般的な回答に比べていくつかの利点があります。
- while条件ははるかに読みやすく、受け入れられるオプションが何であるかを示します。
- よりクリーンなコード。パラメータの数を数えたりシフトしたりしない
- オプションを結合することができます(例
-a -b -c
→-abc
)
ただし、大きな欠点は、長いオプションをサポートしておらず、1 文字のオプションのみをサポートしていることです。