引数を渡すbash関数を使用しています。ユーザーが特定のオプションを定義-v NUM
したかどうかをキャプチャしたいと思います--verbosity=NUM
。説明どおりに定義した場合は、ローカル変数vb
をNUM
。
答え1
私が最初に言いたいのは、GNUスタイルの長いオプションを許可することが目標であると仮定すると、そのような引数を盲目的にスキャンしても詳細を指定する有効な方法がすべて見つからないことです。
ユーザーが-xyv3
(と同じ-x
-y
-v
3
)、(オプションの引数がどこにあるか--output
-v2
と同じ)、(オプションと見なされない場所)、または(GNUオプションスタイルの解析でサポートされている略語)を渡した場合はどうなりますか? /はオプションを正しく解析するのに役立ちます。--output=-v2
-v2
--output
cmd
-x
--
foo
bar
-v
baz
-v
--verb=12
getopt
getopts
ただし、適切なオプションの構文解析を気にせず、その文字列をオプションではなく引数として渡すのではなく、ユーザーが常にそのような-v
/--verbosity
オプションを渡すように依存できる場合は、次のようにします。
extract_verbosity() {
unset -v REPLY
while [ "$#" -gt 0 ]; do
case "$1" in
(-v)
[ "$#" -gt 1 ] || break
shift; REPLY=$1
;;
(--verbosity=*)
REPLY=${1#*=}
esac
shift
done
[ -n "${REPLY+set}" ]
}
その後、あなたの機能から:
my_function() {
verbosity=0 # default
extract_verbosity "$@" && verbosity=$REPLY
...
}