【问题标题】:awk shell variables not workingawk shell 变量不起作用
【发布时间】:2016-02-19 00:01:08
【问题描述】:

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

【问题讨论】:

    标签: ksh


    【解决方案1】:

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

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

    shell 中的赋值两边都可以没有空格

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

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

    【讨论】:

    • 太棒了!这行得通,我正在使用的示例是字符串而不是命令,这就是我引用的原因。非常感谢!
    • 我会将变量更改为小写,我曾尝试将它们导出为环境变量以供使用,但从未将它们改回来。感谢您的帮助!
    猜你喜欢
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 2018-05-06
    • 2020-03-28
    • 2020-12-24
    • 1970-01-01
    相关资源
    最近更新 更多