Bash Cat 命令删除字符

4
我正在尝试将整个文件读入一个变量中,而不删除任何字符。我相信这一定很简单。
这种方法行不通,因为它会删除重复的空格、制表符和换行符:
$ echo 'fred               wilma' > somefile; z=$(cat somefile); echo $z
fred wilma

我可以看到同样的过滤操作也会发生在简单的赋值语句中,例如:

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

但是当我这样做时就不行:

$ echo 'fred             wilma'
fred             wilma

我该如何让bash变量在赋值时停止被解析和过滤?


我无法复制这个问题。你能提供一些关于你的Bash安装的信息吗? - Gordon Seidoh Worley
顺便提一下,我也检查过了,在zsh中它的工作方式与你期望的一样。 - Gordon Seidoh Worley
z="fred wilma"; echo "$z" 看起来是可以工作的...然而,让 $(cat somefile) 正常工作却有问题。 - Brian Roach
@gordon - 在Ubuntu 10.10上的Bash中完全按照描述执行。 - Brian Roach
使用echo "$z"而不是echo $z。 - johnnycrash
2个回答

5
使用echo "$var"命令:
$ z='fred                 wilma'
$ echo "$z"
fred                 wilma

哦,是的。我现在记起来了,Bash 有十七种不同级别的解析参数到命令中,而 echo 是一条命令。如果我几个月没用 Bash,有时它会让我感到神秘。 - johnnycrash
这是因为它被解释为 echo fred wilma - ninjagecko
(哈哈,谢谢stackoverflow...)这是因为它被解释为 echo_fred____________wilma - ninjagecko

2
我已经理解了:
echo 'fred               wilma' > somefile; z=$(cat somefile); echo "$z"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接