POSIX Shell反斜杠混淆

3

我想创建一个带有简单功能的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函数,因为在我看来它是最便携的函数?
1个回答

2
您可以在printf中使用%b
func() { cmd="$@"; printf "%s\n%b" "$cmd" "$cmd"; }

然后按以下方式调用:
func '%{NAME}\n\n'

这将打印出:
%{名称}\n\n %{名称}

1
anubhava,你完全让我的一天都变得美好了。非常感谢! - bingehacking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接