Ist es möglich, $ array = () in bash zu verwenden?

8

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.

    
Qben 08.05.2012, 11:08
quelle

3 Antworten

11

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.

    
FatalError 08.05.2012, 11:16
quelle
1

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.

    
Charles Duffy 08.05.2012 11:19
quelle
-1
%Vor%

Löscht das Array. Ich nehme an, das ist was du wolltest ..

    
SteinAir 01.08.2013 08:20
quelle

Tags und Links