如何从make文件命令中转义双引号以从bash执行

时间:2016-04-26 23:35:55

标签: bash makefile

我尝试使用bash脚本从文本文件执行make命令。 make命令有一个带空格的参数,它不会将参数内容视为一个参数。在这种情况下如何逃避双重报价?

$(echo" make -C ... INSTALL_MOD_STRIP =" - param-one --param-two = .note.gnu.build-id" ARCH = arm64 ... ")

在这种情况下,在echo命令后不考虑INSTALL_MOD_STRIP的双引号,并且--param-two = .note.gnu.build-id不被视为此类关键字的一部分。 如何通过make命令将双引号转换为INSTALL_MOD_STRIP =的内容?

1 个答案:

答案 0 :(得分:0)

我真的无法理解你在这里尝试做什么。写$(echo foo)的目的是什么?为什么不直接写foo

无论如何,双引号从你的表达式中消失的原因是:

echo "make -C ... INSTALL_MOD_STRIP="--param-one --param-two=.note.gnu.build-id" ARCH=arm64 ..."

是因为引号没有嵌套(解析器如何知道这样做?)上面的shell被shell解析为:echo,然后是前两个引号之间的东西: make -C ... INSTALL_MOD_STRIP=,然后是非引用词--param-one--param-two=.note.gnu.build-id,然后是后两个引号之间的内容:ARCH=arm64 ...

如果要嵌套引号,则必须转义内部引号:

echo "make -C ... INSTALL_MOD_STRIP=\"--param-one --param-two=.note.gnu.build-id\" ARCH=arm64 ..."

甚至更好,使用单引号作为外部引号(如果内部内容没有任何变量)或内部引号(如果内容确实有变量):

echo "make -C ... INSTALL_MOD_STRIP='--param-one --param-two=.note.gnu.build-id' ARCH=arm64 ..."