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'選項才能關閉它。 –