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í.