在 Zsh 5.9 中,我们可以使用printf
shell 转义字符串:
$ printf '%q' 'One! Two'
One\!\ Two
!
这会产生转义和 空间的正确输出。现在让我们将其作为脚本:
#!/bin/zsh
printf '%q' "${1}"
现在如果我们运行它,!
不会被转义,但空格是:
$ ./my-script 'One! Two'
One!\ Two
如果我将脚本更改为/bin/bash
(版本 3.2),它会正确转义!
和 空格。
这是 Zsh 的 bug,还是我遗漏了一些微妙的细节?