パラメータを実装する最善の方法が気になります。$x
つまり$7
、パラメータが豊富な関数の最後のパラメータを意味します。これは、「より多くのパラメータの追加を停止するためにここにさまざまなコアデータを入力する」の役割を果たしますか?可能な呼び出しは次のとおりですafunction param1 param2 ... "MYDATA=1 OTHERDATA=true"
。一部のデータに対して複数の単純なトークンを関数に渡す必要があり、位置引数を保持する必要はありません。特に、一部のトークンはオプションであり、関数署名の固定位置に割り当てることができないためです。
修正する:
Zshソリューションの例はafunc ...normal parameters... "MYDATA:1:OTHERDATA:2:"
次のとおりですlocal mydata="${7/(#b)*MYDATA:([^:]#):*/$match[1]}"
。複雑なパターンコードを隠す関数を書くことができ、次のように動作しますget_key "$7" "MYDATA"; local mydata=$REPLY
。このソリューションはうまくいきますが、実際にこれを調べて、特定の方法に最も適したまたは便利なソリューションを見つけたいと思います。
答え1
ループを使用して(残り)パラメータを処理しますshift
。型パラメータの場合は、KEY=VALUE
次のようになります(bashから)。
function foo {
shift # handle the first "fixed" arg
while [ -n "$1" ] ; do
key=${1%%=*}
val=${1#*=}
echo "key: $key value: $val"
shift
done
}
foo first MYDATA=2 OTHERDATA=false
あるいは、(bash 組み込み) を使用してスタイルフラグをgetopts
解析することもできます。-x
function bar {
OPTIND=3 # skip first two args
local opt
while getopts "ab:" opt; do
if [ "$opt" = "a" ] ; then
echo flag -a encountered
elif [ "$opt" = "b" ] ; then
echo flag -b with arg $OPTARG
fi
done
}
bar fixed args -a -b foo