これはおそらく明らかなバグです。しかし、私はそれを見ることができません。スクリプトに引数を渡す必要があるCaseステートメントがあります(例script.sh --verbose --all
:)。
何らかの理由でこの特定の関数は機能しません。最初に渡したフラグでのみ機能します。
#Pass arguments to the script
flags()
{
while test $# -gt 0
do
case "$1" in
(-v|--verbose)
shift
export VERBOSE="1"
shift;;
(-vv|--extra-verbose)
shift
export VERBOSE="1"
export EXTRA_VERBOSE="1"
shift;;
(-a|--all)
shift
export ALL="1"
shift;;
(-h|--help)
usage;;
(*) usage;;
esac
done
}
flags "$@"
echo "Verbose: $VERBOSE, Extra Verbose: $EXTRA_VERBOSE, All: $ALL"
したがって、この場合を渡すと、-v -a
スクリプトは$VERBOSE
変数を設定します。を渡すと、-a -v
スクリプトは$ALL
変数を設定します。
この構造を使用するスクリプトはたくさんありますが、それを表示しません。
私が見逃しているものを見つけるのを手伝ってくれてとても感謝しています。
ありがとうございます!
答え1
が多すぎますshift
。一度だけ実行する必要があり、1つのパラメータを処理してから次のパラメータに進むことができます。
#!/bin/sh
#Pass arguments to the script
flags()
{
while test $# -gt 0
do
case "$1" in
-v|--verbose)
export VERBOSE="1"
;;
-vv|--extra-verbose)
export VERBOSE="1"
export EXTRA_VERBOSE="1"
;;
-a|--all)
export ALL="1"
;;
-h|--help)
usage;;
*) usage;;
esac
# and here we shift to the next argument
shift
done
}
flags "$@"
echo "Verbose: $VERBOSE, Extra Verbose: $EXTRA_VERBOSE, All: $ALL"