我从awk的另一个脚本调用函数。
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
}
答案 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
回答你的问题:
您将/dev/null
放在错误的位置。它应该是脚本的输入,而不是system
函数。
两个原因:首先,您将dk
放在引号内,因此其值不会被替换。其次,derived
函数不打印其参数,它打印$dk
,这是一个不存在的shell变量。函数的参数是$1
,所以应该这样做:
echo "outside function $1"
您在引号内有print
,因此它不会作为声明执行。