【问题标题】:How to prevent GNU Make from interpreting a string?如何防止 GNU Make 解释字符串?
【发布时间】:2014-03-19 14:20:53
【问题描述】:

正如我在this post 中提到的,我一般递归升级我的 git 子模块如下:

git submodule foreach 'git fetch origin; git checkout $(git rev-parse --abbrev-ref HEAD); git reset --hard origin/$(git rev-parse --abbrev-ref HEAD); git submodule update --recursive; git clean -dfx'

从终端调用此命令时效果很好。现在我很难将它嵌入到 GNU make 中,就像在 this Makefileupgrade 目标中一样。 如果我只是复制粘贴命令:

upgrade:
   git submodule foreach 'git fetch origin; git checkout $(git rev-parse --abbrev-ref HEAD); git reset --hard origin/$(git rev-parse --abbrev-ref HEAD); git submodule update --recursive; git clean -dfx'

它不起作用:GNU make 尝试评估/解释 $(git ...) 部分,尽管存在简单的引号。到目前为止,我尝试了几次都没有成功($$\(git ...),定义逐字命令as explained here 等)。

你有什么建议吗?

【问题讨论】:

    标签: makefile gnu gnu-make


    【解决方案1】:

    配方中唯一特殊的字符是$(和反斜杠/换行符组合,但只有换行符之前的反斜杠,没有其他地方)。其他所有字符都会被忽略并传递给命令。

    而且,引用$ 的唯一方法是将其翻倍,变为$$

    所以,要引用$(git rev-parse ...),你只需写$$(git rev-parse ...)。不需要反斜杠等。只需使用 shell 命令和每个你想使用的 $,在字符串中的任何地方,忽略所有类型的 shell 引用,将其转换为 $$

    【讨论】:

    • 看起来我错过了确实成功的“不要逃避括号”的尝试。谢谢;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多