将整个文件读取到变量,保持转义字符不变

时间:2017-02-16 13:12:16

标签: bash shell echo zsh

假设我有以下文件:

hello\nworld

也就是说,字符串\n实际上存在于文件中:

$ cat input.txt
hello\nworld

我想要将此文件读取到shell中的变量中。但是,从文件中读取数据的所有常用方法(如here所述)都会使shell将\n序列解释为换行符:

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

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

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

1 个答案:

答案 0 :(得分:4)

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

然而,在我的测试中,我没有得到这种行为。也许你的echo做了那种解释。试试printf "%s" "$test",看看是否能解决问题。