Сегодня я нахожусь в крушении bash.
Это функция bash, которая возвращает значение через echo:
#!/bin/bash
get_hello_name() {
echo 'Hello $1!'
}
msg=$(get_hello_name "x")
echo $msg
Вывод:
$ bash ./initial_script5.sh
Hello $1!
Затем я неправильно подумал, что последнее эхо было возвращено (я пришел из Java и Python) и пытался использовать эхо для отладки остальной функции.
И тогда мне стало интересно, почему черт не могу напечатать новые строки в моих эхо-заявлениях, несмотря на попытку каждого предложения в этом вопросе.
Этот script демонстрирует проблему:
#!/bin/bash
a_function() {
echo "---In function"
printf %"s\n" hello world
printf "Hello\nworld"
echo $'hello\nworld'
echo -e 'hello\nworld'
}
echo "---Pre function"
printf %"s\n" hello world
printf "Hello\nworld"
echo $'hello\nworld'
echo -e 'hello\nworld'
x=$(a_function "x")
echo $x
echo "---Post function"
printf %"s\n" hello world
printf "Hello\nworld"
echo $'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
Проблема состоит в том, что все эхо-функции в функции объединены вместе, после того, как они были индивидуально обрезаны, а затем возвращены как целое.
Итак, это приводит меня к двум вопросам: как вы отлаживаете функцию, возвращающую значение, и как вы добавляете новые строки в переменную (не то, что я даже хочу сделать последнее, обязательно, но я хотел бы понять она)?