0

質問 :

私はこれの下で歯を折っています:

awk -v full=wc -v empty=wp '{
     ...blablabla...
     if ($4==full) stop=yes
     if (stop==yes && $4==empty) exit
     ...blablabla...
     }'

full2つの変数をempty最初に宣言せず、代わりにスクリプトでこれらの値を使用する場合、コードは適切に機能します(つまり、出力を取得します) 。スクリプトの最初の変数のみを使用すると、同じ出力が得られます。しかし、2番目の変数のみを使用すると、出力がまったく得られません。

4

1 に答える 1

2

変数が展開されたときに何が起こるかを考えてください。awk本体の一部は次の場所から取得されます。

' ... if ($4=='$full') ...'

' ... if ($4==wc) ...'

wcは「ベアワード」であるため、awkはそれを変数と見なし、その値(空の文字列)に置き換えます。したがって、次のようになります。

' ... if ($4=="") ...'

awkスクリプトを作成するときは、awkで文字列を引用することに注意する必要があります。必要なもの:

' ... if ($4=="'$full'") ...'

-vただし、これまでと同じように、awkのオプションを使用して値を渡す方がはるかにエレガントです。

于 2012-08-26T13:45:39.453 に答える