Ich habe assoziative Arrays in meinem Skript verwendet, daher habe ich sie mit dem
deklariert
typeset -A <array_name>
Befehl, und es funktionierte gut in der Bash-Eingabeaufforderung
Aber wenn ich es in meinem Skript verwende, erhalte ich den folgenden Fehler
typeset: -A: invalid option
typeset: usage: typeset [-afFirtx] [-p] name[=value] ...
Eine alternative Lösung wird für mich auch akzeptabel sein.
SIDENOTE:Ich habe versucht, typeset -a, aber es deklariert ein indiziertes Array. Aber ich möchte ein assoziatives Array.
Akzeptierte Antwort:
Das ist der Fehler, der von Bash 3 für typeset -A
generiert wird . Assoziative Arrays wurden in Bash 4 hinzugefügt und sind in Bash 3.2 und früher nicht enthalten.
Es scheint, dass Ihr Skript mit einer anderen Version von Bash ausgeführt wird, als Sie als Shell verwenden. Wenn Sie sich in beiden Fällen auf demselben Computer befinden, haben Sie mehrere Versionen installiert und können wahrscheinlich eine mit einem anderen Pfad auswählen. Wenn Sie sich auf einem anderen Computer befinden, auf dem das Skript ausgeführt wird, können Sie möglicherweise eine neuere Version installieren, aber ansonsten haben Sie Pech, direkte Unterstützung in Bash zu erhalten.
zsh
unterstützt assoziative Arrays seit viel älteren Versionen, also wenn Sie das zur Verfügung haben, können Sie Ihr Skript wahrscheinlich ohne allzu viel Arbeit portieren. Wenn Sie dazu nicht in der Lage sind, können Sie es mit regulären Arrays und grep
vortäuschen , oder verwenden Sie ${[email protected]}
und eine Reihe gewöhnlicher Variablen, die in älteren Bash-Versionen verfügbar sind. ${[email protected]}
erweitert sich auf die Namen aller Variablen, deren Namen mit prefix
beginnen , die Sie in Kombination mit mehreren Variablen prefix_key1
verwenden können , prefix_another
um die meisten Verhaltensweisen assoziativer Arrays zu erhalten.