Почему оценка переменной без кавычек отбрасывает новые строки, а присваивание без кавычек сохраняет новые строки в bash?

Есть много ответов на вопрос «как хранить и печатать новые строки в переменной bash». Вкратце, обычно ответ заключается в том, что переменная, содержащая символы новой строки, должна быть заключена в кавычки при ее оценке.

e.g.

foo="1
2"
echo "$foo"

выходы

1
2

а также

echo $foo

выходы

1 2

В этот момент можно подумать, что строки переменной можно соединить в одну строку, присвоив их другой переменной без кавычек.

e.g.

bar=$foo

Однако

echo "$bar"

выходы

1
2

Возможно, ответ на этот вопрос уже был задан. Но обилие ответов на похожие вопросы может вытеснять существующие ответы на интересующий меня вопрос. Итак, необходимо задаться вопросом: почему оценка переменной без кавычек отбрасывает новые строки, в то время как оценка переменной без кавычек в задании сохраняет новые строки?

Ответы без ссылки на документацию не будут действительно полезны, поскольку поведение и так понятно. Языковые юристы, вероятно, дадут лучшие ответы.


person Lotney    schedule 09.05.2020    source источник
comment
Это связано с разделением слов.   -  person Benjamin W.    schedule 09.05.2020
comment
Я не юрист, извините, но расширение пути/имени файла и разделение слов не происходит во время присвоения переменной. Вот почему цитирование в задании необязательно.   -  person Jetchisel    schedule 09.05.2020
comment
@Jetchisel Если в правой части нет пробелов.   -  person Benjamin W.    schedule 09.05.2020
comment
Канонические вопросы и ответы - это stackoverflow.com/q/29378566/3266847 - разве это не ответ на ваш вопрос? Также много ссылок на спецификацию POSIX.   -  person Benjamin W.    schedule 09.05.2020
comment
@БенджаминВ. Да, предоставленных вами ссылок должно быть достаточно со всеми подробностями.   -  person Jetchisel    schedule 09.05.2020
comment
Я должен что-то упустить, но, AFAICT, все ссылки, приведенные в комментариях, касаются только того, почему echo $foo не печатает новые строки. Они не указывают, почему bar=$foo сохраняет новые строки. Даже если я упустил причину в этих ссылках, было бы полезно получить здесь конкретное и краткое объяснение этого явления.   -  person Lotney    schedule 09.05.2020
comment
@BenjaminW., @Jetchisel, @shelter, кто-нибудь может объяснить разницу между echo $foo и bar=$foo. Приведенные ссылки не относятся к этому конкретному моменту. На самом деле они, кажется, подразумевают, что новые строки должны быть потеряны в обоих случаях.   -  person Lotney    schedule 09.05.2020
comment
руководство по Bash, о назначениях: разделение слов не выполненный   -  person Benjamin W.    schedule 09.05.2020
comment
См. также эти вопросы и ответы.   -  person Benjamin W.    schedule 09.05.2020
comment
Также этот вопрос и этот вопрос unix&linux, который также охватывает (несколько) других случаев где ссылки на переменные в двойных кавычках не нужны.   -  person Gordon Davisson    schedule 09.05.2020