Comment faire echo
et printf
traiter antislashs dans zsh
, bash
et d' autres obus?
Sous zsh, j'obtiens le comportement suivant:
$ echo "foo\bar\baz"
foaaz
$ echo "foo\\bar\\baz"
foaaz
$ echo 'foo\bar\baz'
foaaz
$ echo 'foo\\bar\\baz'
foo\bar\baz
Sous bash , les choses semblent un peu plus cohérentes:
bash$ echo "foo\bar\baz"
foo\bar\baz
bash$ echo 'foo\bar\baz'
foo\bar\baz
bash$
Mais plus concrètement: comment passer une chaîne contenant des barres obliques inverses comme\\foo\bar\something
:
echo
printf
print
et obtenir exactement la même chaîne? (en zsh
et bash
)?
Voici une autre expérience avec des fonctions dans zsh:
function foo
{
echo -E '$1'
}
$ foo \\here\is\some\path
$1
Comment puis-je simplement l'imprimer \\here\is\some\path
?
Mise à jour (Remarque: il a maintenant été répondu dans le commentaire de Stéphane)
J'ai essayé ce qui suit dans zsh 5.0.2:
function foo
{
printf '$s\n' $1
}
foo '\\some\path'
Mais cela imprime $s
?
'
par "
, et invoquez-la avec: foo '\\ ici \ est \ un \ chemin' (sinon le shell appelant a la possibilité d'interpréter le '\' avant d'arriver à la fonction)
'$s\n'
alors qu'elle aurait dû utiliser '%s\n'
.
printf
,echo
n'est pas portable à cet égard.