Почему при вызове метода из метода избегается печать в новой строке? - PullRequest
1 голос
/ 04 мая 2020

Вот пример сценария, который я создал, чтобы проиллюстрировать, что я имею в виду, когда говорю, что у меня проблемы с пониманием, почему echo не печатает в новой строке при вызове метода из другого метода:

prints_new_lines(){
echo hello
echo hello2
echo $(does_not_print_new_lines)
}

does_not_print_new_lines(){
echo here
printf "\n"
echo here2
}

prints_new_lines

Я добавил printf "\ n", чтобы посмотреть, будет ли это работать ...

1 Ответ

0 голосов
/ 04 мая 2020

Если вы хотите напечатать символ новой строки, вам нужно сделать:

echo "$(does_not_print_new_lines)"

т.е. с кавычками.

Это не имеет ничего общего с вызовом из функции и всем делать с кавычками.

Объяснение:

Без кавычек ваша команда echo в основном преобразуется в:

echo here\
here2

т.е. оболочка видит одну команду echo, с 2 аргумента, here и here2, разделенные пробелами - в данном случае символ новой строки.

Так что он просто вызывает

echo 'here' 'here2'

Именно поэтому вы не видите символ новой строки .

Но с кавычками команда преобразуется в

echo "here\
here2"

, т.е. оболочка видит одну команду echo с 1 аргументом:

here
here2

Итак он вызывает

echo 'here
here2'

И вы получаете новую строку.

FWIW, вам, вероятно, следует просто отбросить echo и использовать вместо нее

does_not_print_new_lines

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...