Comment faire echoet printftraiter antislashs dans zsh, bashet 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 :
echoprintfprint
et obtenir exactement la même chaîne? (en zshet 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,echon'est pas portable à cet égard.