2012-01-02 7 views
0

セイの印刷引数名:UNIX - AWK - bashスクリプト内の以下のawkを持つユーザ定義関数

がどのように渡された引数の名前を印刷するprint_line機能を得ることができますか?この出力

array passed in was: 
arrayprime 
array passed in was: 
arraymagic 

コード(全部ではないもの)の要旨のちょうどスニペットすなわち は:

awk -F"$delim" ' 
NR>1 { 

     print_line(arrayprime) 
     print_line(arraymagic) 
} 
    func print_line(arr) 
    { 
     print "array passed in was:" 
      print arr 
    } 

} ' "$filename" 

答えて

5

いいえ、awkはこの内省を可能にする能力を持っていません。

Cの言語は、Cプリプロセッサを使用してこれを実行できます。このような振る舞いをawk関数に振り向けたいのであれば、Cプリプロセッサを使うか、あるいはおそらく書くことができます。GNU M4 macro

もう1つのパラメータを追加したい場合は、そうすることができます。

awk -F"$delim" ' 
NR>1 { 

     print_line(arrayprime, "arrayprime") 
     print_line(arraymagic, "arraymagic") 
} 
    func print_line(arr, name) 
    { 
     print "array passed in was:" 
      print name 
    } 

}' "$filename" 
+0

ほとんどの言語と同様、用途http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_value、ないhttp://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_nameをお願いします。 –