awk shell变量不起作用

时间:2016-02-18 15:10:22

标签: ksh

您好我正在使用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命令是不可能的。这是真的吗?

1 个答案:

答案 0 :(得分:1)

这与awk无关。问题在于您分配变量的方式。你的行应该是这样的:

PKNAME=$(ls -lt /var/db/pkg | tr -s " " | cut -d" " -f9)

shell中任务的任何一侧都可以有无空格

目前,您正在运行命令ls -lt ...,并将变量PKNAME临时分配给空字符串。在后续命令中,变量保持未设置状态。

你的awk命令应该保持不变,即shell变量应该像-v pkname="$PKNAME"一样传递。顺便说一句,使用大写变量名称通常被认为是不好的做法,因为这些名称应保留给shell内部使用。