GNU/Linux >> Znalost Linux >  >> Linux

Sazba -a Je zadávání chyby ve skriptu?

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


Linux
  1. Naučte se zpracování chyb Bash na příkladu

  2. Může být Bash skript připojen k souboru?

  3. Bash skript k vyplnění šablony?

  1. Chyba skriptu Bash:Očekává se celočíselný výraz?

  2. Bash Script - příklad Hello World

  3. Spusťte bash skript z adresy URL

  1. alternativy --config java bash skript

  2. Vyvolat chybu ve skriptu Bash

  3. Porovnávání vzorů skriptů Bash