Cómo hacer echo
y printf
barras invertidas en tratar zsh
, bash
y otros proyectiles?
Bajo zsh obtengo el siguiente comportamiento:
$ echo "foo\bar\baz"
foaaz
$ echo "foo\\bar\\baz"
foaaz
$ echo 'foo\bar\baz'
foaaz
$ echo 'foo\\bar\\baz'
foo\bar\baz
Bajo bash , las cosas parecen un poco más consistentes:
bash$ echo "foo\bar\baz"
foo\bar\baz
bash$ echo 'foo\bar\baz'
foo\bar\baz
bash$
Pero más concretamente: ¿Cómo puedo pasar una cadena que contenga barras invertidas como\\foo\bar\something
:
echo
printf
print
y obtener exactamente la misma cadena? (en zsh
y bash
)?
Aquí hay otro experimento con funciones en zsh:
function foo
{
echo -E '$1'
}
$ foo \\here\is\some\path
$1
¿Cómo puedo hacer que solo imprima \\here\is\some\path
?
Actualización (Nota: esto ahora ha sido respondido en el comentario de Stephane)
He intentado lo siguiente en zsh 5.0.2:
function foo
{
printf '$s\n' $1
}
foo '\\some\path'
Pero esto imprime $s
?
'
con "
, e invocar con: foo '\\ aquí \ es \ alguna \ ruta' (de lo contrario la cáscara invocación tiene la oportunidad de interpretar el '\' antes de que lleguen a la función)
'$s\n'
cuando debería haberlo utilizado '%s\n'
.
printf
,echo
no es portátil en el sentido.