【问题标题】:whats going wrong? Awk output from a Temporary variable into BASH array怎么了?临时变量的 awk 输出到 BASH 数组
【发布时间】:2013-05-31 04:36:22
【问题描述】:

我声明一个临时文件

    TEMPFILE="$(mktemp)"

然后我有一个 awk 语句用输出填充它... 下一步,我有另一个 AWK 语句取出特定字段放入数组中......这是'废话'

DATES = ($(awk -F'/' '{print $2}' '${TEMPFILE}'))

我还使用 CUT 解析成一个单独的数组(不确定它是否工作正常)

IPS = ($(cut -f2 $(TEMPFILE)))

我收到了错误:

Script12.sh:第 36 行:意外标记 `(' 附近的语法错误

Script12.sh:第 36 行:`DATES = ($(awk -F'/''{print $2}' '${TEMPFILE}'))'*

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    shell 对空间敏感。赋值的shell语法是

    var1=[word1] ...
    

    其中 [] 表示可选部分,而 ... 重复。

    注意:= 符号周围没有空格。

    然后,单引号内没有参数扩展(用其值替换$var)。使用双引号:

    DATES=($(awk -F/ '{print $2}' "${TEMPFILE}"))
    

    【讨论】:

    • 请注意,虽然在作业中= 周围禁止使用空格,但在测试中却是必需的。例如。 if [ "$foo" = "$bar" ] 做你所期望的,而 if [ "$foo"="$bar" ] 做一些完全不同的事情(而且没用)。 if ["$foo"="$bar"] 会给你一个 command not found 错误...
    【解决方案2】:

    不要在 BASH 中使用空格进行变量赋值。 = 符号周围不应有空格

    【讨论】:

    • @TimEagle 我愿意。但是 Jens 比我说得清楚得多。因此我投了他的票:-)
    【解决方案3】:

    您不能在 shell 中的分配周围放置空格,并且在 awk 命令行中使用时,您需要将 shell 变量周围的单引号更改为双引号,即 "$TEMPFILE" 而不是 '${TEMPFILE}' 然后不要尝试执行该变量在您的剪切命令行上(想想$(TEMPFILE) 的含义)。

    【讨论】:

      猜你喜欢
      • 2011-05-02
      • 2021-08-22
      • 2014-03-28
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 1970-01-01
      • 2020-01-15
      相关资源
      最近更新 更多