getoptsを使用してbashスクリプトの引数を解析します
while getopts ":hd:" opt; do
case $opt in
d ) echo "directory = $OPTARG"; mydir="$OPTARG"; shift $((OPTIND-1)); OPTIND=1 ;;
h ) helptext
graceful_exit ;;
* ) usage
clean_up
exit 1
esac
done
exeparams="$*"
exeparams
未解析のオプション/引数を保持します。exeparamsを使用して、スクリプト内で実行されるコマンドのオプションを保持したいので(スクリプト自体のオプションと重複する可能性があります)、スクリプトに渡されるオプションを終了するために-を使用します。私が通過した場合
myscript -d myscriptparam -- -d internalparam
exeparams
開催します
-- -d internalparam
--
これらの引数を内部コマンドに渡すために、先頭を削除したいと思います。これを行うためのエレガントな方法はありますか、または--
getopts なしで残りだけを保持する文字列を取得できますか?
shift; OPTIND=1
中に置くことgetopts
はおそらくそれを行うための最良の方法ではありません。オプションは2つしかなく、他のすべてのオプションではスクリプトを終了するだけなので、それはあなたのケースでのみ機能します。それ以外の場合はshift; OPTIND=1
、すべてのオプションで必要になります。つまり、コードが重複することになります(悪い習慣)。shift $((OPTIND - 1))
ループの終わりの直後に行うだけです。これは最も一般的な方法であり、おそらく最も効率的でもあります。