2010-09-06 18 views

Respuesta

4

El VAR variable contiene xyz -e, si accede a través de la variable $ la -e se interpreta como una opción de línea de comandos para el eco. Tenga en cuenta que el contenido de $ VAR no se ajusta automáticamente a "".

Utilice echo "$ VAR" para solucionar su problema.

3

Probar:

echo "$VAR" 

lugar.

(-e es una opción válida para echo - esto es lo que causa este fenómeno).

0

El argumento -e está siendo interpretado por bash como argumento de eco. Trate

echo "$VAR" 
37

Las respuestas que dicen poner $VAR entre comillas solo son correctas por los efectos secundarios. Es decir, cuando se colocan comillas, echo(1) recibe un único argumento de -e xyz, y dado que no es una cadena de opción válida, echo simplemente la imprime. Es un efecto secundario ya que echo podría fácilmente imprimir un error con respecto a las opciones mal formadas. La mayoría de los programas harán esto, pero parece que GNU echo (de coreutils) y la versión integrada en bash simplemente hacen eco de cadenas que comienzan con un guión pero no son cadenas de argumentos válidas. Este comportamiento no está documentado, por lo que no se debe confiar en él.

Además, si $VAR contiene un argumento echo opción válida, a continuación, citando $ VAR no ayudará:

$ VAR="-e" 
$ echo "$VAR" 

$ 

La mayoría de los programas GNU toman -- como un argumento en el sentido de no más procesamiento de las opciones - todos los argumentos después -- deben procesarse como argumentos sin opción. bash echo no es compatible con esto por lo que no puede usarlo. Incluso si lo hiciera, no sería portátil. echo tiene otros problemas de portabilidad (-n vs \c, no -e).

La solución correcta y portátil es usar printf(1).

printf "%s\n" "$VAR" 
+0

La mayoría de las veces correcta respuesta. Aunque el estándar POSIX dice claramente "Las implementaciones no admitirán ninguna opción", históricamente parte de las implementaciones son compatibles con las opciones (violando el estándar). Así que 'printf' es la solución correcta,' echo' realmente debería usarse para producir algunas cadenas constantes como "Hello world", que sabes que no contiene guiones o barras diagonales inversas. –

+0

Gran respuesta. He estado tratando de resolver esto por un momento. gracias. –

+0

Si está empeñado en usar 'echo', puede usar las secuencias de escape' echo -e '\ 055e''. – dosentmatter

Cuestiones relacionadas