1
$ ourSite="super    user"
$ echo $outSite
super user
$ echo "$outSite"
super    user

bash автоматически сжимает соседние пробелы в одно, если мы не используем двойные кавычки для кавычек переменной.

Я странствую, почему Баш хочет сделать так? Эта переменная является просто строкой символов, не лучше ли заменить переменную той, которая изначально была по умолчанию?

1 ответ1

5

Здесь не происходит никакого сжатия. Ваш пример:

 echo $outSite

эквивалентно:

echo super    user

Команда echo, как и все команды оболочки, не видит всю командную строку. Вместо этого он видит массив аргументов, которые анализируются для него оболочкой. Как сказано в bash(1), аргумент командной строки отделяется от следующего аргумента одним или несколькими пробелами. Поэтому, когда оболочка анализирует командную строку, она выводит аргументы один за другим и передает их в echo. (Мы пропустим тот факт, что echo не является отдельной программой, так как концептуально она действует как единое целое.) Поэтому echo видит первый аргумент "super" и второй аргумент "user" и даже не знает, сколько пробелов разделяют два аргумента. Он печатает их, один за другим, с одним разделителем пробела. Другая команда:

echo "$outSite"

в точности эквивалентно

echo "super    user"

передает один аргумент, и этот аргумент имеет встроенные пробелы, которые эхо послушно выводит.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .