Ve svém skriptu jsem používal asociativní pole, a proto jsem je deklaroval pomocí
typeset -A <array_name> a ve výzvě bash to fungovalo dobře
Ale když to použiji ve svém skriptu, zobrazí se mi následující chyba
typeset: -A: invalid option
typeset: usage: typeset [-afFirtx] [-p] name[=value] ...
Alternativní řešení bude pro mě také přijatelné.
SIDENOTE:Zkoušel jsem vysázet -a, ale deklaruje to indexované pole. Ale já chci asociativní pole.
Přijatá odpověď:
To je chyba generovaná Bash 3 pro typeset -A . Asociativní pole byla přidána v Bash 4 a nejsou v Bash 3.2 a dřívějších.
Zdá se, že váš skript je spuštěn s jinou verzí Bash, než kterou používáte jako svůj shell. Pokud jste v obou případech na stejném počítači, máte nainstalovaných více verzí a pravděpodobně si můžete vybrat jednu s jinou cestou. Pokud skript používáte na jiném počítači, možná budete moci nainstalovat novější verzi, ale jinak nemáte štěstí na přímou podporu v Bash.
zsh podporuje asociativní pole již od mnohem starších verzí, takže pokud je máte k dispozici, můžete svůj skript přenést bez přílišné práce. Pokud to nedokážete, můžete to předstírat pomocí běžných polí a grep nebo pomocí ${[email protected]} a sadu obyčejných proměnných, která je dostupná ve starších verzích Bash. ${[email protected]} expanduje na názvy všech proměnných, jejichž názvy začínají prefix , kterou můžete použít v kombinaci s několika proměnnými prefix_key1 , prefix_another získat většinu chování asociativních polí.