生成文件转义问题中的简单回声


这是一个

非常简单的问题,但我正在努力弄清楚如何做到这一点。我有一个生成文件,在生成文件中我有以下行:

echo "java packet.Program $1 $2 $3 $4" > programScript

我的问题是:如何使此行准确地打印引号中的内容?现在,它一直试图将 1、2、3、4 美元解释为参数。我希望生成文件在运行时完全回显"java 数据包"。程序 $1 $2 $3 $4" 字符。"$"给了我一个问题。

谢谢。

编辑:

澄清问题。当我输入"回显'java数据包。程序 $1 $2 $3 $4'> programScript"到终端中,它会准确地打印它应该的样子。但是当我将同一行放入我的makefile文件中并运行"make"时,它不会在"java数据包"之后打印任何内容。程序"。

make不会

尝试解析命令行,因此make"$name"'$name'的处理方式相同;在这两种情况下,$name都将替换为make变量$(name)的值。在这两种情况下,外壳都不会看到$

如果要在生成文件的命令中插入文字$,则需要编写$$

因此,例如:

show_a_dollar:
        echo '$$a'
show_a_variable:
        echo "$$a"

在第一个make规则中,生成的操作为:

echo '$a'

从字面上看,这将呼应$a.在第二个中,生成的操作是

echo "$a"

这将回显环境变量 a 的值。

因此,您需要同时考虑make扩展规则(要求您将$加倍以$$)和 shell 扩展规则(要求命令行参数在单引号内):

echo 'java packet.Program $$1 $$2 $$3 $$4' > programScript

使用任一单引号

echo 'java packet.Program $1 $2 $3 $4' > programScript

或者,转义它们:

echo "java packet.Program $1 $2 $3 $4" > programScript

使用 $$ 在 Makefile 中回显 $。参考:在生成文件中转义

最新更新