2012-01-02 2 views
0

Say с ниже AWK внутри Баш скрипт:Unix - 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

Если вы хотите добавить еще один параметр, вы можете сделать это.

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. –

Смежные вопросы