GNU/Linux >> Linux の 問題 >  >> Linux

配列を環境変数として使用できません

bash 環境変数はキーと値の文字列のペアのみであるため、配列を環境変数にすることはできません。

シェルが $PATH で行うように行うことができます 変数。基本的にはパスの配列です。配列を、配列の値に存在しない特定の文字で区切られた文字列に変換します:

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

またはきちんとした、

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

${arr[*]} の展開 arr の要素になります IFS の最初の文字で区切られた配列 、ここでは : に設定 .このようにすると、文字列の要素が分離されることに注意してください (区切られていない ) : まで 、つまり、最後に空の要素があったとしても、それを区別することはできません.

環境変数を使用してスクリプトに値を渡す代わりに、(明らかに?) コマンドライン引数を使用することができます:

arr=( aa bb cc )

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

スクリプトは、位置パラメータ $1 を使用して、渡された引数に 1 つずつアクセスします。 、 $2$3 など、または [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

配列は bash 固有です。環境変数は名前と値のペアです。

環境変数の仕様を読んでください。その一部は次のとおりです。

<ブロック引用>

環境変数の値は文字列です。 C 言語プログラムの場合、環境と呼ばれる文字列の配列は、プロセスの開始時に使用可能になります。配列は、外部変数 environ によってポイントされます 、次のように定義されます:

extern char **environ;

これらの文字列の形式は name=value です; 名前 文字「=」を含めてはなりません。


Linux
  1. Bash変数代入の単一括弧?

  2. Linux 環境変数名で使用できる文字

  3. エクスポートされた環境変数を削除するにはどうすればよいですか?

  1. ケース条件として変数を使用する方法は?

  2. TERM 環境変数が設定されていません

  3. Linux での環境変数のアクセシビリティ

  1. sed での環境変数の置換

  2. Linux でスペースを使用して環境変数を設定する

  3. 私のgitの言語を変更するには?