関数で使用しようとしてもgetops
機能しないようです。
#!/bin/bash
function main()
{
while getopts ":p:t:c:b:" o; do
case "${o}" in
p)
echo "GOt P"
p=$OPTARG
;;
t)
echo "GOt T"
t=$OPTARG
;;
c)
echo "GOt C"
c=$OPTARG
;;
b)
echo "GOt b"
b=$OPTARG
;;
*)
#usage
echo "Unknown Option"
return
;;
esac
done
echo $p
echo $t
echo $c
echo $b
}
main
次に、次のように実行します。
$ ./bin/testArguments.sh -p . -t README.md -c 234 -b 1
optidがローカルであることを確認しようとしましたが、それも機能しませんでした。別の問題がある可能性がありますか?
ベストアンサー1
関数にmain
パラメータを渡しません。関数がスクリプトに渡されたのと同じ引数を取得するには、次のように渡します。
main "$@"
変える:
main
また、スクリプトに関連しています。
- 「function foo(){}」と「foo(){}」の違い
- なぜprintfがechoより優れているのですか?
- bash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスク
- stderrでエラーを印刷したい:
echo >&2 Unknown option
- エラーが発生した場合は、ゼロ以外の終了ステータスを返そうとします(
return 1
)。 - 関数を呼び出すときに以前に呼び出された場合(たとえば、関数が以前に呼び出された場合)に備えて、最初に1に
getopts
設定することをお勧めします。OPTIND
getopts