我正在尝试创建一个具有简单功能的 shell 脚本,但似乎我无法理解如何正确处理反斜杠。
我的功能之一如下所示:
#!/bin/sh
func() {
cmd="$*"
printf "%s\n" "$cmd"
echo -e $cmd
}
func '%{NAME}\\n'
这是正确的输出,因为我需要它:
%{NAME}\\n
%{NAME}\n
现在的问题是,我不能使用“echo -e”,因为这个脚本需要在 *nix 系统上运行,其中 echo 命令没有“-e”标志(例如 HPUX),这也是我的原因必须使用 sh 而不是 bash。因为我想让这个脚本尽可能可移植,所以我会避免使用 tr/sed 或(甚至更糟糕)脚本语言。
输入字符串的格式可以任意选择。我使用 %{NAME} 是有原因的,因为如果它只是常规字符,那么这样的东西就可以工作:
#!/bin/sh
func() {
cmd="$*"
printf "%s\n" "$cmd"
printf $cmd
echo
}
func 'NAME\\n'
不幸的是,这与“%”等字符不同:
%{NAME}\\n
func.sh: line 6: printf: `{': invalid format character
如何才能(希望)仅通过使用 printf 获得所需的结果,据我所知,这是最可移植的函数?
您可以使用%b
in printf
:
func() { cmd="$@"; printf "%s\n%b" "$cmd" "$cmd"; }
然后将其称为:
func '%{NAME}\n\n'
这将打印:
%{NAME}\n\n
%{NAME}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)