конкатенация линий bash при интерполяции переменных - PullRequest
3 голосов
/ 10 августа 2010
$ cat isbndb.sample | wc -l
13
$ var=$(cat isbndb.sample); echo $var | wc -l
1

Почему символ новой строки отсутствует, когда я присваиваю строку переменной? Как я могу предотвратить преобразование символа новой строки в пробел?

Я использую Bash.

Ответы [ 2 ]

4 голосов
/ 10 августа 2010

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

$ var=$(cat isbndb.sample); echo "$var" | wc -l

И cat не требуется в обоих случаях:

$ wc -l < isbndb.sample
$ var=$(< isbndb.sample); echo "$var" | wc -l

Редактировать:

Bash обычно удаляет дополнительные завершающие символы новой строки из файла, когда назначает его содержимое переменной.Вы должны прибегнуть к некоторым уловкам, чтобы сохранить их.Попробуйте это:

IFS='' read -d '' var < isbndb.sample; echo "$var" | wc -l

Установка IFS на ноль предотвращает разбиение файла на новые строки, а установка разделителя на read на ноль заставляет его принимать файл до конца файла.

0 голосов
/ 10 августа 2010
var=($(< file))
echo ${#var[@]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...