Como fazer echo
e printf
barras invertidas tratamento em zsh
, bash
e outras conchas?
No zsh , recebo o seguinte comportamento:
$ echo "foo\bar\baz"
foaaz
$ echo "foo\\bar\\baz"
foaaz
$ echo 'foo\bar\baz'
foaaz
$ echo 'foo\\bar\\baz'
foo\bar\baz
Sob o bash , as coisas parecem um pouco mais consistentes:
bash$ echo "foo\bar\baz"
foo\bar\baz
bash$ echo 'foo\bar\baz'
foo\bar\baz
bash$
Mas, mais concretamente: como passar uma string contendo barras invertidas, como\\foo\bar\something
:
echo
printf
print
e obter exatamente a mesma string? (em zsh
e bash
)?
Aqui está outro experimento com funções no zsh:
function foo
{
echo -E '$1'
}
$ foo \\here\is\some\path
$1
Como posso imprimir apenas \\here\is\some\path
?
Atualização (Nota: isso já foi respondido no comentário de Stephane)
Eu tentei o seguinte no zsh 5.0.2:
function foo
{
printf '$s\n' $1
}
foo '\\some\path'
Mas isso imprime $s
?
'
por "
e chame-a por: foo '\\ here \ is \ some \ path' (caso contrário, o shell de chamada terá a chance de interpretar o '\' antes de chegar à função)
'$s\n'
quando deveria ter sido usada '%s\n'
.
printf
,echo
não é portátil no que diz respeito.