#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"