VAR=a,b,c,d
# VAR=$(echo $VAR|tr -d '\n')
echo "[$VAR]"
readarray -td, ARR<<< "$VAR"
declare -p ARR
Ergebnis:
[a,b,c,d]
declare -a ARR=([0]="a" [1]="b" [2]="c" [3]=$'d\n')
Wie kann ich sagen readarray
, dass die letzte Zeile nicht hinzugefügt werden soll \n
? Was bedeutet das neueste $
Symbol?
bash
bash-array
user1156544
quelle
quelle
"What is the meaning of the latest $ symbol?"
Antworten:
Das implizite nachgestellte Zeichen für neue Zeilen wird nicht durch das
readarray
eingebaute Zeichen, sondern durch die Zeichenfolge here-string (<<<
) von hinzugefügt.bash
Siehe Warum fügt eine Bash-Zeichenfolge hier ein Zeichen für nachfolgende Zeilenumbrüche hinzu? . Sie können dies beseitigen, indem Sie die Zeichenfolge ohne die neue Zeile druckenprintf
und über eine Prozesssubstitutionstechnik lesen< <()
würde jetzt richtig generieren
quelle
Sie können split + glob verwenden (was passiert, wenn Sie eine Erweiterung in Listenkontexten nicht in Anführungszeichen setzen). Es steht uns die meiste Zeit im Weg, es wäre eine Schande, es nicht zu benutzen, wenn wir es tatsächlich brauchen:
Das ist etwas weniger kompliziert als das Schreiben einer temporären Datei und das anschließende Aufrufen
readarray
wie imreadarray <<< "$string"
Ansatz (beachten Sie auch, dassreadarray -d
eine sehr aktuelle Version von erforderlich istbash
).Beachten Sie, dass trotz der
S
inIFS
(das steht für Separator ), dass die gleiche Art und Weise wie funktioniertreadarray
, dassa,,b,
ist aufgeteilt in"a"
,""
und"b"
nur.Für einen echten Aufteilungsoperator können Sie
zsh
stattdessen Folgendes verwenden :(die
@
und doppelte Anführungszeichen, um die leeren Elemente zu erhalten).quelle
readarray <<< "$string"
schreibt in eine temporäre Datei und löscht sie dann, anstatt den Speicher zu verwenden?readarray -d
Eine Dosenversion der Antwort von @ StéphaneChazelas:
Das
local -
macht Optionen wieset -f
(noglob
) lokal für die Funktion, genau wie Variablen.Das
declare -n a=$1
erstellt eine lokale Variablea
als Alias für die globale Variable mit dem Namen$1
(das erste Argument für die Funktion).quelle