いくつかの引数のセットを関数に渡すことを検討してください。
awk -vv1="Hello there" -vv2=Bye 'BEGIN {print v1,v2}'
最初の引数にはスペースが含まれていることに注意してください。出力は次のとおりです。
Hello there Bye
ここで、引数を変数に格納しようとします。まず、最初の引数にスペースがない場合を考えてみましょう:
arg="-vv1=Hello -vv2=Bye"
awk $arg 'BEGIN {print v1,v2}'
これはうまくいきます。変数にスペースを挿入します。
arg="-vv1='Hello there' -vv2=Bye"
awk $arg 'BEGIN {print v1,v2}'
エラーメッセージが表示されます:
awk: there'
awk: ^ invalid char ''' in expression
ここで何が起きてるの?
アップデート
これまでのコメントに基づいて、質問を絞り込みたいと思います:arg
が別のシェル スクリプトの出力である場合を考えてみましょう。たとえばgenArg
、次の文字列を出力するシェル スクリプトであるとします。
"-vv1='Hello there' -vv2=Bye"
ターミナルへ。次にarg
、次のように(スクリプトで)収集されます
arg=$(genArg)
awk
次に、指定された引数で呼び出したいと思います:
awk $arg 'BEGIN {print v1,v2}'