[bash]Убивает переносы строк

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
ZZaiatSS
Сообщения: 281
Статус: ະໃພຣວືາທູ&

[bash]Убивает переносы строк

Сообщение ZZaiatSS »

Код: Выделить всё

zzaiatss@amaranth:~$ ls -1
first item
second item


в то-же время

Код: Выделить всё

groups=$(ls -1)
echo $groups


выводит

Код: Выделить всё

first item second item


GNU bash, version 4.0.33(2)-release (i686-pc-linux-gnu)

P.S В zsh'е все нормально, но использовать его в скриптовании - изврат
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: [bash]Убивает переносы строк

Сообщение /dev/random »

ZZaiatSS писал(а):
16.10.2009 19:09

Код: Выделить всё

groups=$(ls -1)

Код: Выделить всё

groups="$(ls -1)"

Если использовать без кавычек, то любые последовательности пробельных символов (в т.ч. переводов строк) превращаются в одиночные пробелы. И, ЕМНИП, это не прихоть баша - этого требует Posix.
Спасибо сказали:
Аватара пользователя
ZZaiatSS
Сообщения: 281
Статус: ະໃພຣວືາທູ&

Re: [bash]Убивает переносы строк

Сообщение ZZaiatSS »

Код: Выделить всё

groups="$(ls -1)"


Не помогло, все точно так-же осталось

И, ЕМНИП, это не прихоть баша - этого требует Posix.


А почему в zsh все нормально?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: [bash]Убивает переносы строк

Сообщение /dev/random »

ZZaiatSS писал(а):
16.10.2009 19:34

Код: Выделить всё

groups="$(ls -1)"


Не помогло, все точно так-же осталось

В echo тоже нужны кавычки.
Спасибо сказали:
Аватара пользователя
ZZaiatSS
Сообщения: 281
Статус: ະໃພຣວືາທູ&

Re: [bash]Убивает переносы строк

Сообщение ZZaiatSS »

В echo тоже нужны кавычки.


Спасибо, работает ^^
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [bash]Убивает переносы строк

Сообщение sash-kan »

в echo кавычек более чем достаточно:

Код: Выделить всё

$ ls -1
i 1
i 2
$ g=$(ls -1)
$ echo "$g"
i 1
i 2


p.s. echo здесь, кстати, абсолютно ни при чём. ни /bin/echo, ни встроенный в bash.
замену непечатаемых символов на пробелы осуществляет сам bash во время парсинга команды. боюсь, никакими стандартами эта процедура не затронута. и замена подобная выглядит более чем логичной.
не хочется замены — заключайте строку с непечатаемыми символами в кавычки.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: [bash]Убивает переносы строк

Сообщение /dev/random »

sash-kan писал(а):
17.10.2009 03:17
в echo кавычек более чем достаточно:

Да, ты прав. Я просто взял за правило заключать в кавычки _всё_, где есть пробелы. Чтобы не путаться. Поэтому и сказал, что заключить в кавычки нужно и присваивание. Запутался )))

sash-kan писал(а):
17.10.2009 03:17
p.s. echo здесь, кстати, абсолютно ни при чём. ни /bin/echo, ни встроенный в bash.
замену непечатаемых символов на пробелы осуществляет сам bash во время парсинга команды. боюсь, никакими стандартами эта процедура не затронута. и замена подобная выглядит более чем логичной.
не хочется замены — заключайте строку с непечатаемыми символами в кавычки.

А это действительно следует из стандартов. echo выводит все переданные ему параметры, разделяя их одним пробелом. А при подстановке разделителями параметров служат любые пробельные символы. И то, и другое - по стандарту. Вот и всё. А заключение в кавычки просто отменяет разбиение на параметры.

Это я просто тогда ответил исходя из практики, не вдумавшись в теорию.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: [bash]Убивает переносы строк

Сообщение t.t »

ZZaiatSS писал(а):
16.10.2009 19:34
А почему в zsh все нормально?
В zsh как раз ненормально: там за это специальная настройка отвечает. А в bash достаточно поставить или не поставить кавычки; т.е. расставив кавычки правильным образом, Вы всегда будете уверены в единообразной работе скрипта -- вне зависимости от умолчаний оболочки на конкретной машине.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: