【问题标题】:Bad subsitution when trying to do string replacement with parameter expansion尝试使用参数扩展进行字符串替换时出现错误替换
【发布时间】:2021-07-24 02:27:30
【问题描述】:

也许这是一个愚蠢的问题,但我正在编写一个非常小的 Gedit 外部工具,用于在按键上编译 .qrc(Qt 资源文件)。这是我的代码:

echo $GEDIT_CURRENT_DOCUMENT_PATH
pyrcc $GEDIT_CURRENT_DOCUMENT_PATH -o ${GEDIT_CURRENT_DOCUMENT_PATH/.qrc/.py}

运行上面,我得到了

/home/user/.local/lib/python3/qrecartivi/resources.qrc
/home/user/.config/gedit/tools/new-tool: 12: /home/user/.config/gedit/tools/new-tool: Bad substitution

第 12 行实际上是我的 sh 代码的第 2n 行(这个偏移是由于 gedit 添加了一些 cmets 造成的)。 我只是无法弄清楚为什么这种替代应该是错误的。提前致谢。

【问题讨论】:

  • ${name/from/to}bash 功能;您可能没有使用bash 执行您的脚本。
  • @chepner 我正在使用破折号

标签: bash sh substitution string-substitution parameter-expansion


【解决方案1】:

正如@chepner 在评论中所述,严格符合 POSIX 标准的 shell 解释器 (Dash) 不支持语法 ${var/str1/str2}

您有两种解决方案:

  • 使用支持这种变量替换的 Bash

  • 使用符合 POSIX 标准的方式将扩展替换为另一个。比如这样:

pyrcc "$GEDIT_CURRENT_DOCUMENT_PATH" -o "$(basename "$GEDIT_CURRENT_DOCUMENT_PATH" .qrc).py"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2019-03-16
    • 2013-02-02
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多