Come fare echo
e printf
backslash trattare in zsh
, bash
e altre shell?
Sotto zsh ottengo il seguente comportamento:
$ echo "foo\bar\baz"
foaaz
$ echo "foo\\bar\\baz"
foaaz
$ echo 'foo\bar\baz'
foaaz
$ echo 'foo\\bar\\baz'
foo\bar\baz
Sotto bash , le cose sembrano un po 'più coerenti:
bash$ echo "foo\bar\baz"
foo\bar\baz
bash$ echo 'foo\bar\baz'
foo\bar\baz
bash$
Ma più concretamente: come posso passare una stringa contenente barre rovesciate come\\foo\bar\something
:
echo
printf
print
e ottieni esattamente la stessa stringa? (in zsh
e bash
)?
Ecco un altro esperimento con funzioni in zsh:
function foo
{
echo -E '$1'
}
$ foo \\here\is\some\path
$1
Come posso averlo appena stampato \\here\is\some\path
?
Aggiornamento (Nota: questo è stato risposto nel commento di Stephane)
Ho provato quanto segue in zsh 5.0.2:
function foo
{
printf '$s\n' $1
}
foo '\\some\path'
Ma questo stampa $s
?
'
con "
e invocalo con: pippo '\\ here \ is \ some \ path' (altrimenti la shell che invoca ha la possibilità di interpretare il '\' prima che arrivino alla funzione)
'$s\n'
quando avrebbe dovuto essere utilizzata '%s\n'
.
printf
,echo
non è portatile al riguardo.