如何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
?
更新(注意:这已在Stephane的评论中得到回答)
我在zsh 5.0.2中尝试了以下方法:
function foo
{
printf '$s\n' $1
}
foo '\\some\path'
但这印$s
吗?
'
为"
,然后用foo'\\ here \ is \ some \ path'调用它(否则,调用shell在获得该函数之前有机会解释“ \”)
'$s\n'
在应该使用的时候使用过'%s\n'
。
printf
,echo
就此而言不可移植。