2016-07-28 57 views
1

Kann mir bitte jemand erklären, warum meine IFS-Anweisung meine Zeichen in meiner Ausgabedatei ersetzt? Was muss ich ändern, um es zu lösen? Ich mag eine Eingabedatei Zeile für Zeile (Datensatz für Datensatz) und die IFS lesen, um völlig außer Acht gelassen werden, aber ich bin nicht sicher, was so zu setzen, dass ich aus, was ich in.IFS in .ksh handeln strangly

#!/bin/bash 
SAVEIFS=$IFS 
IFS='\n' 
record="The rain in Spain" 
record2="c:\user\user\document.txt" 
echo $record 
echo $record 

Meinen Ausgang all meine Kleinschreibung ersetzt ‚n‘ Zeichen mit einem Leerzeichen und meine ‚\‘ Zeichen gelöscht werden, statt (was ich dachte passieren würde) durch eine neue Trennlinie zwischen:

The rai i Spai 
c: user user docume t.txt 

Vielen Dank im Voraus

Antwort

5

Das ist kein literal newline - Ihre Feldtrennzeichen sind buchstäblich die Zeichen \ (Backslash) und n. Sie können diese verwenden:

IFS=' 
' 

oder this:

IFS=$'\n' 
+1

'ksh' auch ANSI-C unterstützt zitiert:' IFS = $ '\ n''. – chepner

+0

Danke. Was machst du da? ist das "gefolgt von einer neuen Linie und dann noch einer"? Ich bin verwirrt, warum sie auf getrennten Zeilen sind. – markie1611

+0

chepner - Danke, das ist eigentlich das, was ich ursprünglich hatte, als es das Problem verursachte (ich tippe alles neu, weil mein tatsächliches Skript auf einer Testmaschine nicht mit irgendetwas anderem verbunden ist. Internet und ich habe das $ vergessen. – markie1611