2016-03-22 18 views
0

Ich bin neu auf Bash und ich versuche, ein Bash-Skript, das Benutzer mehrsprachige Eingaben (ein Text mit Zeilenumbrüchen, einige Zeilen Code, etc.) zu speichern. Ich muss Newline erlauben (wenn Sie "Enter" drücken), mehrzeiligen einfügen (wenn Sie einige Zeilen einfügen "Strg + V") und einen neuen Schlüssel, anstatt "Enter", zu validieren, senden Sie die Eingabe und fahren Sie fort mit der nächster Schritt des Skripts.Bash: lesen/lesen Array mehrzeiliger Eingang

Ich versuchte mit read, aber Sie können Multiline nicht tun.

echo "Enter content :" 
read content 

ich ein Beispiel mit readarray hier (How to delete a character in bash read -d multiline input?), die „Enter“ drücken für Newline erlauben aber jeweils Wörter getrennt von Raum sind in der Anordnung getrennt. Ich möchte nur die Linien getrennt haben.

echo "Enter package names, one per line: hit Ctrl-D on a blank line to stop" 
readarray -t pkgs 

Haben Sie irgendwelche Ideen? Oder gibt es vielleicht eine ganz andere Art, es zu tun? Danke für Ihre Hilfe.

Antwort

0

Sie können IFS auf newline setzen, so dass nur Zeilenumbrüche Elemente im Array trennen.

IFS=$'\n' readarray lines 

Die erste Zeile Lese wird ${lines[0]}, die zweite ${lines[1]}, sein usw. ${#lines[@]} Sie, wie viele Zeilen erzählt, und die letzte wird ${lines[${#lines[@]}-1]} sein.

Um das Array zu durchlaufen, verwenden Sie "${lines[@]}", nicht ${lines[*]}; Letzteres bringt Sie gleich wieder zurück zu einzelnen Wörtern.

+0

Hallo und danke für diese Antwort. Ich wusste nichts über IFS. Für andere Leute, die interessiert sind: 'echo" Geben Sie Paketnamen, einen pro Zeile: drücken Sie Strg-D auf eine leere Zeile, um zu stoppen " IFS = $ '\ n' lesen Zeilen für Zeile in $ {Zeilen [* ]} do \t echo "$ line" >> result.txt done' – Lucien

+0

Versuchen Sie nicht, Code-Blöcke in Kommentare einzufügen; es funktioniert nicht gut. :) Siehe auch meine Bearbeitung. –