No Zsh 5.9, podemos usar printf
para escapar de uma string:
$ printf '%q' 'One! Two'
One\!\ Two
Isso produz a saída correta de escapar do !
e do espaço. Agora vamos fazer isso como um script:
#!/bin/zsh
printf '%q' "${1}"
Agora, se executarmos, o !
não escapa , mas o espaço é:
$ ./my-script 'One! Two'
One!\ Two
Se eu alterar o script para /bin/bash
(versão 3.2), ele escapará corretamente do !
espaço e.
Isso é um bug do Zsh ou há algum detalhe sutil que estou perdendo?