【问题标题】:Set variable if it is unset in awk如果在 awk 中未设置,则设置变量
【发布时间】:2023-01-13 06:37:53
【问题描述】:

如果之前未定义foo,我想将变量foo设置为bar。目前我正在使用

foo = foo ? foo : bar

但我觉得在 POSIX awk 中有一种更聪明的方法可以做到这一点。例如在 POSIX Shell 中我可以写

${foo:-bar}

【问题讨论】:

  • 如果定义了 foo 但“不真实”,例如 foo=0 或 foo="",那么也会将 foo 设置为 bar。这与 POSIX shell 示例不同。
  • awk 中没有这样的速记。顺便说一句 foo = foo ? foo : bar 是不正确的。可以将其初始化为foo = ""foo = 0
  • 使用 GNU awk 你有 typeof 但那只是 GNU。

标签: awk posix conditional-operator


【解决方案1】:

在任何 awk 中稳健地假设 foo 是标量变量并且不能是数组:

foo = ( (foo == 0) && (foo == "") ? bar : foo )

未初始化的标量变量的值为零或空,因为还没有“类型”属性(字符串或数字)与之关联,因此如果变量未设置,则将变量与零和空进行比较会成功,否则会失败。

【讨论】:

    猜你喜欢
    • 2013-08-27
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    相关资源
    最近更新 更多