2011-06-15 20 views
6

considerar:

 
#!/bin/bash 

echo ' 
' $LINENO 
echo '' ' 
' $LINENO 

El primer eco imprime correctamente un 4, pero la segunda imprime un eco 5 en lugar de 6. Me estoy perdiendo algo, o se trata de un error? (Usando bash 3.00.15)

Respuesta

4

Parece un error de implementación (error) en bash.

I utilizados:

#!/bin/bash -p 
echo $LINENO 
echo ' ' $LINENO ' 
' $LINENO ' 
' $LINENO 
echo '' ' 
' $LINENO 

que produjo:

2 
    3 
3 
3 

6 

que apoya la teoría de que se evalúa la variable antes de la cáscara considera la línea a se ha completado. Una vez que la línea se ha completado, actualiza el LINENO y continúa.

versiones Bash probados: 3.2.48 (MAC), 4.1.5 (Linux)

Cuando utilizo la sintaxis:

echo ' 
' $LINENO 

se pone el número de línea más reciente. Parece estar relacionado con la evaluación de la cadena vacía transportada como único argumento en la línea.

+0

zsh no parecen tener el misfeature ... – Petesh

1

Bash parece interpretar una cadena múltiple & argumento multilínea al comando echo estar en una sola línea del archivo de código fuente (script), porque Bash tiene que concatenar la cadena múltiple & argumento de varias líneas de el comando echo en un argumento único (una línea). El mecanismo de concatenación también se desencadena por una cadena vacía '' seguida de una cadena que contiene un carácter de nueva línea echo -e '' + '\n' + $LINENO.

#!/bin/bash 
# Bash concatenates a multi-string & multi-line argument ... 
echo ' ' $LINENO ' 
' $LINENO ' 
' $LINENO 

# ... into a one line argument. 
echo -e "' ' $LINENO '\n' $LINENO '\n' $LINENO\n" 

#!/bin/bash 
echo "2 
3 
4 
5 
6 LINENO: $LINENO" # 6 LINENO: 6 
exit 

#!/bin/bash 
echo "2" " " " 
3 
4 
5 
6 LINENO: $LINENO" # 6 LINENO: 2 
# echo -e "2" + " " + "\n3\n4\n5\n6 LINENO: $LINENO" 
exit 
Cuestiones relacionadas