どのように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'で呼び出します(そうでなければ、呼び出し側のシェルは、関数に到達する前に '\'を解釈する機会を得ます)
'$s\n'
すべきであったときに使用した関数'%s\n'
。
printf
、echo
点で移植性がありません。