getoptsを使用してbashのオプションに3つの引数を提供する

getoptsを使用してbashのオプションに3つの引数を提供する

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

おすすめ記事