awk shell 变量不起作用

awk shell variables not working

您好,我使用的是 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 命令。这是真的吗?

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

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

shell.shell 中赋值的两边不能有空格。

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

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

内部使用。