-hオプションの後にgetoptsが2つの引数を受け入れるようにするにはどうすればよいですか?私の言葉は配列に保存する必要がありますが、うまくいかない、または次のような間違いをしていることを意味します。 echo "${array[1]} ${array[2]}"
OPTIND=1
hh=
while getopts "h:" flag
do
case "$flag" in
h)
hh=($OPTARG) ;;
esac
done
shift "$((OPTIND-1))"
答え1
-h
一つの方法は何度も渡すことです。
OPTIND=1
hh=()
while getopts h: flag; do
case "$flag" in
h) hh+=("$OPTARG");;
esac
done
shift "$((OPTIND-1))"
そしてそれを呼び出す:
myscript -h host1 -h host2...
答え2
これは不可能です。あなたができることは、適切な区切り文字で引用され、区切られた2つの引数を渡し、分割してOPTARG
2つの部分を得ることです。
可能な呼び出し構文の例は次のとおりです。
prog -h part1:part2
prog -h "part1 part2"
宣言では、case
たとえば、コロン区切り文字の場合、次のようにコンポーネントを分割できます。
p1=${OPTARG%:*} p2=${OPTARG#*:}
part1
編集(説明):「適切な区切り記号」は、単一/コンポーネントに属さない区切り文字であるため、複合内part2
で一意であるため、OPTARG
分割はあいまいではありません。
答え3
短い答え:getopts
この方法では使用されません。
長い答え:次のことを試すことができますが(テストされていません)、getopts
構文チェックは実行されません。
OPTIND=1
hh=()
args=( "$@" )
while getopts "h:" flag; do
case "$flag" in
h)
hh=("$OPTARG" "${args[$OPTIND]}")
$((OPTIND++))
;;
esac
done
shift "$((OPTIND-1))"
このパスを使用する場合は、独自のエラー処理を追加する必要があります。たとえば、2番目のパラメータが存在しない、空、またはパラメータではないオプションのように見えます。