Wie kann echo
und printf
behandeln Schrägstriche in zsh
, bash
und andere Schalen?
Unter zsh bekomme ich folgendes Verhalten:
$ echo "foo\bar\baz"
foaaz
$ echo "foo\\bar\\baz"
foaaz
$ echo 'foo\bar\baz'
foaaz
$ echo 'foo\\bar\\baz'
foo\bar\baz
Unter Bash scheinen die Dinge etwas konsistenter zu sein:
bash$ echo "foo\bar\baz"
foo\bar\baz
bash$ echo 'foo\bar\baz'
foo\bar\baz
bash$
Aber konkreter: Wie kann ich eine Zeichenfolge mit Backslashes übergeben, z. B\\foo\bar\something
.:
echo
printf
print
und genau die gleiche Zeichenfolge bekommen? (in zsh
und bash
)?
Hier ist ein weiteres Experiment mit Funktionen in zsh:
function foo
{
echo -E '$1'
}
$ foo \\here\is\some\path
$1
Wie kann ich es nur drucken lassen \\here\is\some\path
?
Update (Hinweis: Dies wurde jetzt in Stephanes Kommentar beantwortet.)
Ich habe in zsh 5.0.2 Folgendes versucht:
function foo
{
printf '$s\n' $1
}
foo '\\some\path'
Aber das druckt $s
?
'
durch "
und rufen Sie sie auf mit: foo '\\ here \ is \ some \ path' (andernfalls erhält die aufrufende Shell die Möglichkeit, das '\' zu interpretieren, bevor sie zur Funktion gelangt)
'$s\n'
wenn sie hätte verwendet werden sollen '%s\n'
.
printf
,echo
ist in dieser Hinsicht nicht tragbar.