script - ¿Cómo generar una cadena multilínea en Bash?
script linux ejemplos (5)
Aquí los documentos se usan a menudo para este propósito.
cat << EOF
usage: up [--level <n>| -n <levels>][--help][--version]
Report bugs to:
up home page:
EOF
Se admiten en todas las shells derivadas de Bourne, incluidas todas las versiones de Bash.
¿Cómo puedo generar una cadena de líneas múltiples en Bash sin usar múltiples llamadas de eco de esta manera?
echo "usage: up [--level <n>| -n <levels>][--help][--version]"
echo
echo "Report bugs to: "
echo "up home page: "
Estoy buscando una forma portátil de hacerlo, usando solo Bash builtins.
EDITAR
Esta es la solución que se me ocurrió, que es una variación de la respuesta de Dennis.
read -d '''' help <<- EOF
usage: up [--level <n>| -n <levels>][--help][--version]
Report bugs to:
up home page:
EOF
echo "$help"
Como recomendé printf
en un comentario, probablemente debería dar algunos ejemplos de su uso (aunque para imprimir un mensaje de uso, sería más probable que use las respuestas de Dennis o Chris). printf
es un poco más complejo de usar que echo
. Su primer argumento es una cadena de formato, en la que los escapes (como /n
) siempre se interpretan; también puede contener directivas de formato que comienzan con %
, que controlan dónde y cómo se incluyen los argumentos adicionales. Aquí hay dos enfoques diferentes para usarlo para un mensaje de uso:
Primero, podría incluir el mensaje completo en la cadena de formato:
printf "usage: up [--level <n>| -n <levels>][--help][--version]/n/nReport bugs to: /nup home page: /n"
Tenga en cuenta que a diferencia de echo
, debe incluir la nueva línea final explícitamente. Además, si el mensaje contiene un %
caracteres, deberían escribirse como %%
. Si desea incluir el informe de errores y las direcciones de la página de inicio, se pueden agregar de forma bastante natural:
printf "usage: up [--level <n>| -n <levels>][--help][--version]/n/nReport bugs to: %s/nup home page: %s/n" "$bugreport" "$homepage"
En segundo lugar, puede usar la cadena de formato para que imprima cada argumento adicional en una línea separada:
printf "%s/n" "usage: up [--level <n>| -n <levels>][--help][--version]" "" "Report bugs to: " "up home page: "
Con esta opción, agregar el bugreport y las direcciones de la página de inicio es bastante obvio:
printf "%s/n" "usage: up [--level <n>| -n <levels>][--help][--version]" "" "Report bugs to: $bugreport" "up home page: $homepage"
También con el código fuente sangrado puede usar << - (con un guión final) para ignorar las pestañas o espacios iniciales. Por ejemplo esto:
if [ some test ]; then
cat <<- xx
line1
line2
xx
fi
Emite texto sangrado sin el espacio en blanco inicial:
line1
line2
Use la opción -e
, luego puede imprimir un nuevo carácter de línea con /n
en la cadena.
Sample (pero no estoy seguro si es bueno o no)
Lo divertido es que la opción -e
no está documentada en la página del manual de MacOS mientras aún se puede usar.Está documentado en la página de manual de Linux .
o puedes hacer esto:
echo "usage: up [--level <n>| -n <levels>][--help][--version]
Report bugs to:
up home page: "