将特殊字符回显到bash中的文件

时间:2015-01-12 22:55:36

标签: bash shell echo

我正在尝试创建一个脚本来帮助我将端口源代码备份到debian文件。

尝试编写debian / rules文件

~$ echo -e  "#!/usr/bin/make -f\n%:\n\tdh \$@" > debian/rules
bash: !/usr/bin/make: event not found

我认为#和!搞砸了。如何在没有shell尝试执行它们的情况下回显字符串的这些组件? 我试过用“#”和“!”但后来我会得到那个:“!”

我想要一个看起来完全像这样的规则文件:

#!/usr/bin/make -f
%:
    dh $@

我该怎么办?

2 个答案:

答案 0 :(得分:3)

!不会被双引号转义

'#!/usr/bin/make -f\n%:\n\tdh \'"$@"

应该没问题。但是,请看这里 - 文件:

cat <<MAKEFILE
#!/usr/bin/make -f
%:
    dh $@
MAKEFILE

答案 1 :(得分:0)

我有另一种方法,使用ANSI十六进制代码(如果您很聪明,甚至可以使用Unicode十六进制代码)。

$ echo -e "\x23\x21/usr/bin/make -f\n\x25:\n\tdh \x24\x40"
#!/usr/bin/make -f
%:
        dh $@

尽管@sehe对here documents的使用非常巧妙,但是我的方法对我来说更直观。 (如果您对ANSI不太熟悉,它也将需要较少的查找。)我需要知道#U+0023!U+0021;等等。我一直都在使用Unicode代码点,因此速度很快。