GNU/Linux >> Znalost Linux >  >> Linux

Nelze použít pole jako proměnnou prostředí

A bash pole nemůže být proměnnou prostředí, protože proměnné prostředí mohou být pouze páry řetězců klíč-hodnota.

Můžete to udělat stejně jako shell se svým $PATH proměnná, což je v podstatě pole cest; přeměňte pole na řetězec, oddělený nějakým konkrétním znakem, který se jinak v hodnotách pole nevyskytuje:

$ arr=( aa bb cc "some string" )
$ arr=$( printf '%s:' "${arr[@]}" )
$ printf '%s\n' "$arr"
aa:bb:cc:some string:

Nebo úhlednější,

arr=( aa bb cc "some string" )
arr=$( IFS=:; printf '%s' "${arr[*]}" )
export arr

Rozšíření ${arr[*]} budou prvky arr pole oddělené prvním znakem IFS , zde nastaveno na : . Všimněte si, že pokud to uděláte tímto způsobem, prvky řetězce budou odděleny (není odděleno ) podle : , což znamená, že byste nebyli schopni rozlišit prázdný prvek na konci, pokud by tam nějaký byl.

Alternativou k předávání hodnot do skriptu pomocí proměnných prostředí je (samozřejmě?) použití argumentů příkazového řádku:

arr=( aa bb cc )

./some_script "${arr[@]}"

Skript by pak přistupoval k předávaným argumentům jeden po druhém pomocí pozičních parametrů $1 , $2 , $3 atd. nebo pomocí [email protected] :

printf 'First I got "%s"\n' "$1"
printf 'Then  I got "%s"\n' "$2"
printf 'Lastly there was "%s"\n' "$3"

for opt in "[email protected]"; do
    printf 'I have "%s"\n' "$opt"
done

Pole jsou specifické pro bash. Proměnné prostředí jsou páry název-hodnota.

Přečtěte si specifikace proměnných prostředí, které částečně říkají:

Hodnota proměnné prostředí je řetězec znaků. Pro program v jazyce C musí být na začátku procesu k dispozici pole řetězců nazývaných prostředí. Na pole ukazuje externí proměnná prostředí , který je definován jako:

extern char **environ;

Tyto řetězce mají tvar název=hodnota; jména nesmí obsahovat znak '='.


Linux
  1. Tipy a triky pro proměnné prostředí Linuxu

  2. Jednoduchá závorka v přiřazení proměnné Bash?

  3. Nelze použít klonovaný VM, OpenSUSE, VirtualBox

  1. Jak používat proměnnou jako případovou podmínku?

  2. variabilní dostupnost prostředí v Linuxu

  3. jak předat proměnnou prostředí sudo su

  1. Substituce proměnné prostředí v sed

  2. Povolené znaky v názvech proměnných prostředí Linux

  3. Jak odstraním exportovanou proměnnou prostředí?