getoptsを使用して解析済みアイテムを引き出した後、残りの引数を取得するにはどうすればよいですか?


14

getoptsを使用してbashスクリプトへのいくつかの引数を解析したいが、オプションリストに含まれていない残りの引数にアクセスできるようにしたい。たとえば、電話がある場合:

% script -a -b param -c param -d other arguments here

してただろう:

while getopts "ab:c:d" opt ; do
.
done

getoptsで処理されない「他の引数」を取得する最も簡単な方法は何ですか?

回答:


17

引数を解析するとき、または置くときにシフトする必要があります

解析が終了した後に$((OPTIND -1))をシフトし、通常の方法で処理します。例

while getopts "ab:c:d" opt ; do
.
done
shift $(expr $OPTIND - 1 )

while test $# -gt 0; do
  echo $1
  shift
done

1
$ OPTINDは、各getoptsの実行後に考慮される次のオプションのインデックスであることを説明する価値があります。したがって、$ *には3つのパラメーターが含まれ、最初の有効な呼び出しに続いて2、2番目に3になります。呼び出しが無効な場合、以前の値でドロップアウトします。したがって、パラメーター1が無効な場合、OPTINDは1になります(したがって、上記の例shift $(expr 1 - 1)は安全です
。– sibaz

0

解析の終了時に、変数$ @が行の終わりを含むようにシフトすると、

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.