La historia mixta de echo
significa que su funcionamiento predeterminado varía de shell a shell. POSIX especifica que el resultado de echo
está "definido por la implementación" si el primer argumento es -n
o cualquier argumento contiene una barra invertida.
Es más confiable usar printf
(ya sea como un comando incorporado o un comando externo) donde el comportamiento está mejor definido:los escapes de barra invertida estilo C y los especificadores de formato son compatibles con la cadena de formato (el primer argumento).
printf 'foo\nbar\n'
printf '%s\n%s\n' foo bar
Puede controlar la expansión de las secuencias de escape de barra invertida de bash echo
de comando incorporado con el xpg_echo
opción de shell.
Ponlo en la parte superior de cualquier bash secuencia de comandos para hacer echo
expandir automáticamente los escapes de barra invertida sin tener que agregar -e
a cada comando de eco.
shopt -s xpg_echo
echo 'foo\nbar'
La práctica recomendada es usar printf
para todos los scripts nuevos.
printf '%s\n%s\n' "Hello" "World"
printf '%s\n' "Hello\nWorld"
Cuando usas bash myfile.sh
, Bash se ejecuta en modo "por lotes", en un separado proceso, y no leer su perfil o rcfile.
Cuando usas . myfile.sh
, el archivo tiene fuente por el proceso de shell actual (como si usted escribiera su contenido), por lo tanto, ve sus alias definidos actualmente.
En general, es una muy mala idea escribir scripts que dependan de una configuración de shell en particular, especialmente alias, a menos que los defina en el script sí mismo. (Nunca confiar en el .bashrc
del usuario , incluso si es tuyo).