1

いくつかの引数のセットを関数に渡すことを検討してください。

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}'
4

3 に答える 3

9

配列を使用します。

arg=(-vv1="Hello there" -vv2=Bye)
awk "${arg[@]}" 'BEGIN {print v1,v2}'
于 2013-10-11T12:37:04.697 に答える