以下のコードでは、オプションを提供するときにr
引数getopts
が必要です。
while getopts ":hr::l:" opt; do
case $opt in
r ) echo "Run Numbers - argument = $OPTARG " ;;
l ) echo "Latency range - argument = $OPTARG" ;;
h ) helptext
graceful_exit ;;
* ) usage
clean_up
exit 1
esac
done
-r
ただし、オプションの後に1つではなく2つのパラメータを渡す必要があります。見つけることができるショートカットがありますか?
答え1
単一のオプションを使用して2つの引数を渡すことはできませんgetopts
。
次の選択肢をお勧めします。
複数のパラメータの周りに引用符を入れます。
この場合、getoptsはそれを1つの引数として扱いますが、後で分割できます。すべてのパラメータを一度に配列に配置することもできます。
#!/bin/bash while getopts ":hr:l:" opt; do case $opt in r ) echo "Run Numbers - argument = $OPTARG " set -f # disable glob IFS=' ' # split on space characters array=($OPTARG) ;; # use the split+glob operator l ) echo "Latency range - argument = $OPTARG" ;; h ) helptext graceful_exit ;; * ) usage clean_up exit 1 esac done echo "Number of arguments: ${#array[@]}" echo -n "Arguments are:" for i in "${array[@]}"; do echo -n " ${i}," done printf "\b \n"
例を実行してください:
./script -r "123 456 789"
そして出力:
Run Numbers - argument = 123 456 789 Number of arguments: 3 Arguments are: 123, 456, 789
カンマ(またはその他の好みの文字)を区切り文字として使用してください。
./script -r 123,456,789
上記のコードを交換してください
IFS=" "
。IFS=,
この方法の利点は、空の要素を許可することです。注釈セクションで指摘したように、このソリューションはいくつかの一般的なプログラムで選択されていますlsblk -o NAME,FSTYPE,SIZE
。複数の
-r
オプションを許可複数
-r
ですが、それぞれ1つのパラメータのみを使用します。./script -r 123 -r 456 -r 789
その後、パラメータが1つずつ配列に追加されます。
array+=("$OPTARG")
これの利点は、要素に含めることができる文字に制限がないことです。このツールは
awk -v var1=x -v var2=y
。