unset array[0]
Entfernt das Element, aber wenn ich echo ${array[0]}
einen Nullwert erhalte, gibt es noch andere Möglichkeiten, dies zu tun, aber wenn ein Element eines Arrays Leerzeichen wie unten enthält
array[0]='james young'
array[1]='mary'
array[2]='randy orton'
Aber auch diese machen ihren Job nicht
array=${array[@]:1} #removed the 1st element
Jetzt möchte ich, dass das neue Array so aussieht
array[0]='mary'
array[1]='randy orton'
Die Leerzeichen verursachen nach der Zuweisung Probleme, und das tatsächliche Array wird durch Substitution ersetzt.
array=(mary randy orton)
bash
shell
shell-script
array
münchen
quelle
quelle
Antworten:
Verwenden Sie einfach die Array-Syntax für die Zuweisung und zitieren Sie Ihre Variable:
Bearbeiten Sie nach Frage im Kommentar. Für
$@
Sie kann es so verwendet werden:quelle
zsh
verhält es sich mit Arrays, die im Gegensatz zu ksh oder bash nicht spärlich sind.shift
?array=("${array[@]: -3}")
und 3: beizubehaltenset -- "${@: -3}"
. Also bei Indizes stecken.shift $[$#-3]
für die letzten 3 ist wahrscheinlich viel schneller für$@
Das hat mich zum Nachdenken gebracht. Das Problem mit sed / awk / tail ist, dass sie zeilenweise sind. Nachdem Sie die erste Zeile gelöscht haben, müssen Sie jede zweite Zeile aus dem Musterbereich in die Datei schreiben.
Entfernen Sie die erste Zeile, wenn Sie sie wieder in die Datei kopieren.
Ändern Sie einfach
largefile
den Namen Ihrer Datei.quelle
sed -i 1d largefile
stattdessen verwenden? Dies funktioniert sogar für Dateien, die größer als RAM + Swap sindUm ein Element an einem bestimmten Index zu entfernen, können Sie es verwenden
unset
und dann in ein anderes Array kopieren. Nur ebenunset
ist in diesem Fall nicht erforderlich. Daunset
das Element nicht entfernt wird, wird lediglich eine Nullzeichenfolge für den bestimmten Index im Array festgelegt.Ausgabe ist
quelle
quelle