Zwei Dinge, zuerst ist dies meine erste Frage in diesem Forum und ich entschuldige mich, wenn die Formatierung überall ist. Zweitens habe ich nicht so viele Bash-Skripte geschrieben, und es ist eine ziemlich lange Zeit zwischen den Skripten, die ich produziere.
Das heißt, hier ist meine Frage.
Ist es möglich, etwas in bash zu tun (Clear array $ array contains):
$array=()
Grundsätzlich möchte ich das machen. Ich habe eine Variable mit Array-Variablennamen:
%Vor% Meine Arrays enthalten Zeichenfolgen, die " " (Leerzeichen) enthalten. Deshalb verwende ich die
eval
-Anweisung. Nicht sicher, dass es gebraucht wird, aber zumindest funktioniert es. Das Skript funktioniert mehr oder weniger so, wie ich es möchte, aber ich muss die Arrays in $arrayList
löschen, und ich möchte es lieber nicht hart codieren, auch wenn das einfach wäre.
Vielen Dank im Voraus.
Wahrscheinlich ist das Einfachste, was zu tun ist, nur unset
sie. Eine nicht gesetzte Variable verhält sich in den meisten Kontexten identisch mit einem leeren Array und unset $array
sollte funktionieren.
Sie können $foo=bar
niemals tun - so funktionieren indirekte Zuweisungen in bash nicht. Leider ist es zwar möglich, indirekte Array-Zuweisungen durchzuführen, aber es ist in ksh93 nicht verfügbar, es ist kein formal dokumentiertes Feature in bash.
Zitieren BashFAQ # 6 (das sollte vollständig gelesen werden, wenn Sie mehr über die Verwendung indirekter Variablen erfahren möchten im Allgemeinen):
Uns ist kein Trick bekannt, der diese Funktionalität in POSIX- oder Bourne-Shells duplizieren könnte (kurz, wenn Sie eval verwenden, was sehr schwierig ist, sicher zu tun). Bash kann es fast - einige indirekte Array-Tricks funktionieren, andere nicht, und wir wissen nicht, ob die Syntax in zukünftigen Versionen stabil bleibt. Betrachten Sie dies als eine Nutzung auf eigene Gefahr.
%Vor%
Das Löschen ist jedoch einfacher, da unset $array
gut funktioniert.
Tags und Links bash