GNU/Linux >> Znalost Linux >  >> Linux

bash:nastavení proměnné env pole a dereferencování z libovolného skriptu shellu selže

Přečtěte si podrobný manuál, sekci "chyby".

Proměnné pole nelze (zatím) exportovat.

I když nevím, že to mnozí považují za skutečnou chybu. Ostatní shelly, které podporují pole ve stylu ksh, také neumožňují jejich export.

Definice polí můžete předat poměrně snadno, prostřednictvím parametrů nebo proměnných nebo prostředí. Obvykle to však není příliš užitečné.

function f {
    unset -v "$2"
    typeset "$2"
    eval "${!1}"
    typeset -p "$2"
}

typeset -a a=(a b c)
myArr=$(typeset -p a) f myArr a

Nedorozumění je v domnění, že proměnné prostředí používají pouze shelly – nejsou. Do bloku prostředí nelze exportovat žádné atributy, včetně pouze pro čtení, celého čísla a polí. Proměnné prostředí může číst jakýkoli jazyk, C, C++, Perl, Java, Python, PHP a tak dále. Existují také v systému Windows.

Jak by tedy mohl jiný jazyk podporovat specifické atributy Bash? Všechny proměnné prostředí jsou převedeny na řetězce, kromě Bash, kde se hodnoty pole vůbec neexportují.

Korn shell exportuje pouze první prvek. ksh93 také dělá nějaké exec zneužití k zachování proměnných atributů exportovaných do Korn shellu.

Mimochodem, je považováno za špatnou praxi používat pro názvy proměnných VELKÁ PÍSMENA, protože by mohly kolidovat s těmi, které používá shell. Také v Bash 3 má název STRING problémy při exportu (opraveno v Bash 4).


Linux
  1. Formát data a času pro skript nebo proměnnou prostředí Linux

  2. Zkopírujte a přepište soubor ve skriptu shellu

  3. bash + čtení proměnných a hodnot ze souboru pomocí bash skriptu

  1. Proměnné prostředí Linux:Jak číst a nastavovat na Linux VPS

  2. Jak nastavit/vytvořit proměnné prostředí a prostředí v Linuxu

  3. Rozdíl mezi proměnnými Shell, které se exportují, a těmi, které nejsou v Bash?

  1. Shell skript s funkcí a parametrem jako proměnnými?

  2. Jak mohu ftp a stáhnout soubory ze skriptu prostředí UNIX

  3. Zrušení skriptu shellu, pokud jakýkoli příkaz vrátí nenulovou hodnotu