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.
内部使用。
您好,我使用的是 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.