您好我正在使用GNU awk 3.1.5版,我在KSH脚本中指定了2个变量
PKNAME= ls -lt /var/db/pkg | tr -s " " | cut -d" " -f9
PKDATE= ls -lt /var/db/pkg/$PKNAME/ | tr -s " " | cut -d" " -f6-8
我试图通过使用
运行测试来证明我得到了正确的输出echo bar
awk -F, -v pkname="$PKNAME" -v pkdate="$PKDATE" 'BEGIN{print pkname, pkdate, "foo"; exit}'
echo baz
此输出会产生2个空格和foo,如此
bar
foo
baz
我试过,双引号变量,单引号和反向标记。还尝试了双引号和后面的刻度。
为什么变量没有被执行的任何想法?我是awk的新手,感谢任何帮助!感谢
我想有可能在awk语句中运行子shell命令是不可能的。这是真的吗?
答案 0 :(得分:1)
这与awk无关。问题在于您分配变量的方式。你的行应该是这样的:
PKNAME=$(ls -lt /var/db/pkg | tr -s " " | cut -d" " -f9)
shell中任务的任何一侧都可以有无空格。
目前,您正在运行命令ls -lt ...
,并将变量PKNAME
临时分配给空字符串。在后续命令中,变量保持未设置状态。
你的awk命令应该保持不变,即shell变量应该像-v pkname="$PKNAME"
一样传递。顺便说一句,使用大写变量名称通常被认为是不好的做法,因为这些名称应保留给shell内部使用。