GNU/Linux >> Tutoriales Linux >  >> Linux

echo el carácter de nueva línea no funciona en bash

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).


Linux
  1. Encerrando vs. ¿No encerrar el valor de una variable entre comillas en Bash?

  2. ¿R 3.5.0 no funciona en Ubuntu 18.04?

  3. printf:comando no encontrado

  4. eco:comando no encontrado

  5. Matriz en Bash no encontrada

Comando Bash printf

Uso de declaraciones de casos en Bash

declaración Bash/sh 'if else'

bash sh - comando no encontrado

El comando de Linux 'll' no funciona

El comando Conda funciona en el símbolo del sistema pero no en el script bash