在awk中传递和返回外部函数的值

时间:2015-03-03 06:19:36

标签: bash unix awk

我从awk的另一个脚本调用函数。

  1. 为什么我需要在添加/ dev / null
  2. 后按Enter键
  3. 为什么不显示传递的参数。我有空位。
  4. 我没有从外部函数获取返回值。

  5. cat mainpgm.sh
    #!/bin/bash
    key="09"
    awk -v dk="$key" ' { ma = system(". /home/ott/functions.sh;derived dk")</dev/null ; "print returned value" ma } '
    
    
    cat functions.sh
    #!/bin/bash
    derived () {
    echo "outside function" $dk
    return 9
    }
    

1 个答案:

答案 0 :(得分:1)

如果您不想在awk处理输入,请将其输入重定向到/dev/null,并执行BEGIN块中的所有操作。此外,要将dk变量替换为其值,它必须在引号之外。

awk -v dk="$key" 'BEGIN { 
    ma = system(". /home/ott/functions.sh;derived " dk); 
    print "returned value", ma 
}' < /dev/null

回答你的问题:

  1. 您将/dev/null放在错误的位置。它应该是脚本的输入,而不是system函数。

  2. 两个原因:首先,您将dk放在引号内,因此其值不会被替换。其次,derived函数不打印其参数,它打印$dk,这是一个不存在的shell变量。函数的参数是$1,所以应该这样做:

    echo "outside function $1"
    
  3. 您在引号内有print,因此它不会作为声明执行。