0

私はファイル1を持っています:

1
2
3

このコマンドは次のように出力します。

$ awk 'BEGIN{system("cat " 1)}'
1
2
3

$ awk 'BEGIN{system( "cat '\''" 1 "'\''") }'
1
2
3

ファイル名を「1」から「one」に変更しました

私はファイルを持っています

1
2
3

現在、コマンドは機能しません。

$ awk 'BEGIN{system("cat " one)}' 
|

$ awk 'BEGIN{system( "cat '\''" one "'\''") }'
cat: : No such file or directory

なぜ今コマンドが機能しないのですか?

ご説明ありがとうございます。

4

3 に答える 3

2

あなたの例では、awk1はリテラル1oneとして、そして値を持たない変数として解釈します。つまり、またはsystemを実行しようとしています。cat {empty}cat ''

これを試して:

awk 'BEGIN{one = "one" ; system("cat " one)}'

また:

awk 'BEGIN{system("cat one")}'
于 2012-11-13T12:37:21.923 に答える
1

awkでは1、の値はで1あり、指定された変数oneは空の文字列です。"cat" 1文字列もそうですcat 1が、"cat" one文字列catです。文字列"cat '\''" one "'\''"は文字列cat ''であるため、空の文字列を最初の引数としてcatに渡します。

于 2012-11-13T12:26:23.627 に答える
1

ファイル名が数値の場合、system()に直接数値を書き込むことができ、awkはそれを内部で文字列値に変換します。結果として数値を取得する式を書くこともできます。例えば:

system("cat "4-3)「1」の場合にも機能するはずです。違いを確認するには、ファイルに「1 + 1」という名前を付けると機能system("cat "1+1)しなくなり、ファイル「2」が存在しないというメッセージが表示されます。

「one」の例の場合:system()の「one」は文字列「one」ではなく「one」という名前の変数として機能しました。awkでは、変数が割り当てられていない場合、そのデフォルト値は空の文字列です。

于 2012-11-13T12:38:31.437 に答える