【问题标题】:Bad Substitution Error from Variables [duplicate]变量中的错误替换错误[重复]
【发布时间】:2017-12-13 17:21:48
【问题描述】:

我正在尝试编写一个对一些文件进行排序的脚本,并且我让它在 shell 中手动工作(Debian,似乎是破折号),但是当我运行与脚本相同的代码时,我得到“错误替换”从第 2 行和第 3 行开始;

#!/bin/bash
LAST_MONTH="${date +'%Y%m' -d 'last month'}"
LAST_MONTH_HYPHEN="${date +'%Y-%m' -d 'last month'}"

我在 SO 上找到的所有内容似乎都与不同的 shell 有关,所以我尝试了 #!/bin/sh#!/bin/bash。我还尝试将脚本作为./filesorter.shbash filesorter.shsh filesorter.sh 运行,并且每个排列都给了我在相同“坏替换”主题上的一些变化

filesorter.sh: line 2: ${date +'%Y%m' -d 'last month'}: bad substitution
filesorter.sh: line 3: ${date +'%Y-%m' -d 'last month'}: bad substitution

【问题讨论】:

    标签: linux bash shell debian


    【解决方案1】:

    将大括号改为括号。

    LAST_MONTH="$(date +'%Y%m' -d 'last month')"
    LAST_MONTH_HYPHEN="$(date +'%Y-%m' -d 'last month')"
    

    花括号用于变量替换,如${var},相当于$var。括号用于命令替换,如$(command arg1 arg2)

    Shellcheck 是检查 shell 脚本语法的好工具。当你输入你的脚本时,它会说:

    SC2154date 已被引用但未分配(对于命令的输出,请使用 "$(date ...)")。

    【讨论】:

      猜你喜欢
      • 2011-09-29
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多