Как echo
и printf
лечить слеш zsh
, bash
и другие снаряды?
Под Zsh я получаю следующее поведение:
$ echo "foo\bar\baz"
foaaz
$ echo "foo\\bar\\baz"
foaaz
$ echo 'foo\bar\baz'
foaaz
$ echo 'foo\\bar\\baz'
foo\bar\baz
В bash все выглядит более согласованным:
bash$ echo "foo\bar\baz"
foo\bar\baz
bash$ echo 'foo\bar\baz'
foo\bar\baz
bash$
Но более конкретно: как я могу передать строку, содержащую обратную косую черту, такую как\\foo\bar\something
:
echo
printf
print
и получить точно такую же строку? (в zsh
а bash
)?
Вот еще один эксперимент с функциями в Zsh:
function foo
{
echo -E '$1'
}
$ foo \\here\is\some\path
$1
Как я могу это просто напечатать \\here\is\some\path
?
Обновление (Примечание: на этот вопрос уже дан ответ в комментарии Стефана)
Я пробовал следующее в zsh 5.0.2:
function foo
{
printf '$s\n' $1
}
foo '\\some\path'
Но это печатает $s
?
'
на "
и вызываете ее с помощью: foo '\\ here \ is \ some \ path' (в противном случае вызывающая оболочка получает возможность интерпретировать '\' до того, как они попадут в функцию)
'$s\n'
когда она должна была использоваться '%s\n'
.
printf
,echo
не переносимо в этом отношении.