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

echo special characters to a file in bash

我正在尝试制作一个脚本来帮助我将源代码移植回 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 $@

我该怎么办?

!没有被双引号转义

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

应该没问题。但是,请查看这里的文档:

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

我有一个替代方法,使用 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 代码点,所以它很快。