2017-02-16 80 views
2

假设我有以下文件:阅读整个文件变量,保持逃脱完整字符

hello\nworld 

也就是说,字符串\n是在文件中逐字:

$ cat input.txt 
hello\nworld 

我想阅读这个文件,就像它在shell中的变量一样。然而,从文件中读取数据,像所有常见的方法描述here,使外壳解释\n序列作为新行:

% test="$(<input.txt)" 
% echo "$test"   
hello 
world 
% test="$(cat input.txt)" 
% echo "$test" 
hello 
world 

这是完全出乎意料的给我,坦白说,我很困惑的是我无法在互联网上找到这个问题的答案;我预计有人已经绊倒了这个问题。

我还看到,如果在逐行读取文件时使用read -r,它可以工作,但我不想逐行读取它,我想读取整个文件。具体而言,我希望test变量在字面上包含字符串“hello \ nworld”。我该怎么做?

+1

你的'echo'别名可能是'echo -e'吗? – gudok

+0

@gudok不,不是。 –

+0

'type echo'和'which echo'告诉了什么? – Leon

回答

3

您可以使用read -r -d '' <input.txt来读取单个字符串中的整个文件。

但是,在我的测试中,我没有得到这种行为。也许你的echo做这种解释。尝试printf "%s" "$test"以查看是否可以修复它。

+0

哇,确实printf技巧没有工作,所以看起来像'$(<文件)'工作正常。看来这确实是echo的问题。这就是说,我现在记得我实际上使用zsh而不是bash,也许它是因为zsh而发生的。 –

+0

是的,我在zsh文档中发现默认'echo'扩展了转义字符,并且必须提供一个'-E'选项才能关闭它。 –