¿Cómo depurar una función bash que devuelve un valor y cómo agregar nuevas líneas a una variable?

Hoy estoy en un curso intensivo de bash.

Esta es una función bash quedevuelve un valor, a través de echo:

#!/bin/bash
get_hello_name() {
  echo 'Hello $1!'
}
msg=$(get_hello_name "x")
echo $msg

Salida:

$ bash ./initial_script5.sh
Hello $1!

Entonces pensé incorrectamente que elúltimo echo fue devuelto (vengo de Java y Python), y estaba tratando de usar echo para depurar el resto de la función.

Y luego me preguntaba por qué diablos no podía imprimir nuevas líneas en mis declaraciones de eco, a pesar de intentarlocada sugerencia enesta pregunta.

Este script demuestra el problema:

#!/bin/bash
a_function() {
  echo "---In function"

  printf %"s\n" hello world
  printf "Hello\nworld"
  echo 

El problema es esetodas de los ecos en la función están concatenados juntos,después de ser recortado individualmente, y luego regresó como un todo.

Así que esto me lleva a dos preguntas: ¿cómo depurar una función que devuelve un valor y cómo se agregan nuevas líneas a una variable (no es que quiera hacer esto último necesariamente, pero me gustaría entenderlo)?

hello\nworld' echo -e 'hello\nworld' } echo "---Pre function" printf %"s\n" hello world printf "Hello\nworld" echo

El problema es esetodas de los ecos en la función están concatenados juntos,después de ser recortado individualmente, y luego regresó como un todo.

Así que esto me lleva a dos preguntas: ¿cómo depurar una función que devuelve un valor y cómo se agregan nuevas líneas a una variable (no es que quiera hacer esto último necesariamente, pero me gustaría entenderlo)?

hello\nworld' echo -e 'hello\nworld' x=$(a_function "x") echo $x echo "---Post function" printf %"s\n" hello world printf "Hello\nworld" echo

El problema es esetodas de los ecos en la función están concatenados juntos,después de ser recortado individualmente, y luego regresó como un todo.

Así que esto me lleva a dos preguntas: ¿cómo depurar una función que devuelve un valor y cómo se agregan nuevas líneas a una variable (no es que quiera hacer esto último necesariamente, pero me gustaría entenderlo)?

hello\nworld' echo -e 'hello\nworld' $ bash ./initial_script5.sh ---Pre function hello world Hello worldhello world hello world ---In function hello world Hello worldhello world hello world ---Post function hello world Hello worldhello world hello world

El problema es esetodas de los ecos en la función están concatenados juntos,después de ser recortado individualmente, y luego regresó como un todo.

Así que esto me lleva a dos preguntas: ¿cómo depurar una función que devuelve un valor y cómo se agregan nuevas líneas a una variable (no es que quiera hacer esto último necesariamente, pero me gustaría entenderlo)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta