bash cat удаляет символы

#bash #variables #variable-assignment #cat

#bash #переменные #переменная-назначение #cat

Вопрос:

Я пытаюсь прочитать весь файл в переменную, не удаляя никаких символов. Я уверен, что это должно быть глупо просто.

Это не работает, поскольку удаляет повторяющиеся пробелы, все табуляции и новые строки:

 $ echo 'fred               wilma' > somefile; z=$(cat somefile); echo $z
fred wilma
  

Я вижу, что такая же фильтрация происходит при простом назначении, подобном этому:

 $ z='fred                 wilma'; echo $z
fred wilma
  

но не тогда, когда я делаю это:

 $ echo 'fred             wilma'
fred             wilma
  

Как мне заставить переменную bash перестать анализироваться и фильтроваться при присвоении?

Комментарии:

1. Я не могу воспроизвести проблему. Можете ли вы предоставить некоторую информацию об установке вашего bash?

2. К вашему сведению, также проверено, и это работает так, как вы ожидаете, в zsh.

3. z="fred wilma"; echo "$z" кажется, работает… однако приступить $(cat somefile) к работе проблематично

4. @gordon — делает точно так, как описано в bash на Ubuntu 10.10

5. echo «$ z» вместо echo $ z .

Ответ №1:

Использовать echo "$var" :

 $ z='fred                 wilma'
$ echo "$z"
fred                 wilma
  

Комментарии:

1. о, да. Теперь я помню, что bash имеет 17 различных уровней параметров синтаксического анализа для команд, а echo — это команда. Если я не использовал bash пару месяцев, это просто иногда озадачивает меня.

2. это потому, что оно интерпретируется как echo fred wilma

3. (LOL, спасибо stackoverflow …) это потому, что это интерпретируется как echo_fred____________wilma

Ответ №2:

Разобрался:

 echo 'fred               wilma' > somefile; z=$(cat somefile); echo "$z"