2017-02-16 1 views
2

Angenommen, ich habe die folgende Datei:Lesen gesamte Datei Variable, intakte Zeichen entkam keeping

hello\nworld 

Das heißt, \n die Zeichenfolge ist buchstäblich in der Datei:

$ cat input.txt 
hello\nworld 

Ich möchte lese diese Datei genau so wie sie ist in eine Variable in der Shell. Doch alle gemeinsamen Ansätze für die Daten aus einer Datei zu lesen, wie jene, die beschrieben here, die Shell die \n Sequenz als Newline machen interpretieren:

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

Dies ist für mich völlig unerwartet war, und ehrlich gesagt ich bin verwirrt, dass Ich kann keine Antwort auf dieses Problem im Internet finden; Ich habe erwartet, dass jemand schon über dieses Problem gestolpert ist.

Ich sah auch, dass, wenn Sie read -r beim Lesen einer Datei Zeile für Zeile verwenden, es funktioniert, aber ich möchte es nicht Zeile für Zeile lesen, ich möchte die gesamte Datei lesen. Konkret möchte ich die test Variable hier die Zeichenfolge "Hallo \ nWorld" buchstäblich enthalten. Wie mache ich es?

+1

Ist Ihr 'echo' vielleicht auf' echo -e' umbenannt? – gudok

+0

@gudok nein, ist es nicht. –

+0

Was sagen "type echo" und "which echo"? – Leon

Antwort

3

Sie können wahrscheinlich read -r -d '' <input.txt verwenden, um die gesamte Datei in einer einzigen Zeichenfolge zu lesen.

In meinen Tests bekomme ich dieses Verhalten jedoch nicht. Vielleicht macht Ihre echo diese Interpretation. Versuchen Sie printf "%s" "$test", um zu sehen, wenn das es behebt.

+0

Wow, tatsächlich funktioniert printf-Trick, also sieht es so aus, als ob $ $ (

+0

Ja, ich habe in der zsh-Dokumentation gefunden, dass 'echo' standardmäßig die Escape-Zeichen erweitert, und eine '-E'-Option bereitgestellt werden muss, um dies zu deaktivieren. –