bashでgetoptsを使用してコマンドラインを処理しようとしています。 -wオプションの後に3つのパラメータを渡す必要があります。たとえば、-w 1 はループを実行します。 doパターンを含むループの各行の前後に1行を印刷する必要があります。これは私の現在のコードです。
#!/bin/bash
file=`ls | grep ^$1$`
pattern=`cat $file |grep -B$2 -A$2 $3`
while getopts":w:" opt
do
case $opt in
w) $2=$OPTARG ; pattern=$OPTARG ; file=$OPTARG ;array=($OPTARG)
;;
*)echo " usage: -w <pattern>"
exit 1
;;
esac
done
echo "${#array[@]}"
echo "line: $2, pattern: $pattern, file: $file"
1つのフラグから3つの変数を取得する方法はありますか?
答え1
オプションごとに1つの引数しか渡すことはできませんが、a、b、cを指定してから一時的にIFSを「、」に設定し、readを使用して引数a、b、cを3つの単語に分割できます。
たとえば、
$ OPTARG="1,do,loop"
$ IFS=, read n patt file <<<"$OPTARG"
$ echo $n; echo $patt; echo $file
1
do
loop