我在Makefile中有以下sed命令:
SNORT_OPTS=`echo -n "--disable-nls --disable-silent-rules --libdir=/usr/lib \
--host=x86_64-linux-gnu --build=x86_64-linux-gnu --enable-gre --enable-targetbased \
--enable-ppm --enable-sourcefire --enable-perfprofiling --enable-zlib \
--enable-non-ether-decoders" |
sed -e 's/ +/ /'`
sed -e "/OPTIONS :/s/:.*$$/: $$SNORT_OPTS/" -e '/OPTIONS :/a # SWE built : snort-2.9.8.2' < snort-2.9.8.2/etc/snort.conf |
sed -f snort.conf.sed > snort-2.9.8.2/etc/snort.conf-new
问题是当Makefile运行时,它会生成以下命令:
SNORT_OPTS=`echo -n "--disable-nls --disable-silent-rules --libdir=/usr/lib \
--host=x86_64-linux-gnu --build=x86_64-linux-gnu --enable-gre --enable-targetbased \
--enable-ppm --enable-sourcefire --enable-perfprofiling --enable-zlib \
--enable-non-ether-decoders" |
sed -e 's/ +/ /'`
sed -e "/OPTIONS :/s/:.*$/: $SNORT_OPTS/" -e '/OPTIONS :/a # SWE built : snort-2.9.8.2' < snort-2.9.8.2/etc/snort.conf |
sed -f snort.conf.sed > snort-2.9.8.2/etc/snort.conf-new
在SNORT_OPTS中,双元($$)已被单一美元($)取代。
哪个错误: sed:-e expression#,char 68:`s
的未知选项sed命令可以正常使用双倍美元($$)。如何确保Makefile不会替换&#34; $$&#34;使用&#34; $&#34;
答案 0 :(得分:2)
正如您已经注意到的那样,您可以用另一个美元符号逃脱美元符号:
$$hello
发送到/bin/sh
时,它将变为
$hello
所以基本上你只需要逃避两个美元符号:
$$$$
将成为
$$