【问题标题】:What is the meaning of a double dollar sign in bash/Makefile?bash / Makefile中双美元符号的含义是什么?
【发布时间】:2014-12-21 06:56:55
【问题描述】:

在 Makefile 中插入 shell 脚本时,我们可以 (?) 使用双美元符号 ($$) 来引用变量。为什么会这样?

for number in 1 2 3 4 ; do \
    echo $$number ; \
done

【问题讨论】:

    标签: linux bash makefile


    【解决方案1】:

    根据gnu make official doc

    配方中的变量和函数引用具有相同的语法和 makefile 中其他地方的引用的语义。他们也有 相同的引用规则:如果您希望美元符号出现在您的 食谱,你必须把它加倍('$$')。对于像默认外壳这样的外壳, 使用美元符号来引入变量,重要的是要保持 清楚你要引用的变量是否是 make 变量(使用单个美元符号)或 shell 变量(使用两个 美元符号)。

    简而言之:

    • makefile 变量 => 使用单个美元符号
    • shell 变量 => 使用两个美元符号

    【讨论】:

    • 详细说明syntax for variables:“要替换变量的值,请在括号或大括号中写一个美元符号,后跟变量名称:$(foo)${foo}是对变量 foo 的有效引用。$ 的这种特殊意义就是为什么您必须编写 $$ 才能在文件名或配方中产生单个美元符号的效果。"
    【解决方案2】:

    不直接适用于这个例子——除非显示的代码是通过$(shell ...)而不是规则执行的:

    启用二级扩展后,make 还可能在第二个处理阶段解释双美元本身,当它出现在先决条件列表中时。 (第一阶段:读取文件,设置变量;第二阶段:查找和调用依赖目标,执行规则)

    当具有目标名称的变量仅在文件中稍后可用时,这用于允许动态指定依赖目标。

    https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html

    【讨论】:

      猜你喜欢
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2010-11-22
      相关资源
      最近更新 更多