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

bash:配列の環境変数を設定し、それをシェル スクリプトから参照解除すると失敗する

すばらしいマニュアルの「バグ」セクションを読んでください。

<ブロック引用>

配列変数は (まだ) エクスポートされていない可能性があります。

ただし、多くの人がこれを実際のバグと考えているかどうかはわかりません。 ksh スタイルの配列をサポートする他のシェルでも、それらをエクスポートすることはできません。

パラメータ、変数、または環境を介して、配列定義を簡単に渡すことができます。ただし、通常はあまり役に立ちません。

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

誤解は、環境変数はシェルによってのみ使用されると考えていることです-実際には使用されていません。読み取り専用、整数、配列などの属性は、環境ブロックにエクスポートできません。環境変数は、C、C++、Perl、Java、Python、PHP などの任意の言語で読み取ることができます。 Windows にも存在します。

では、別の言語で Bash 固有の属性をサポートするにはどうすればよいでしょうか?配列値がまったくエクスポートされない Bash を除いて、すべての環境変数は文字列に変換されます。

Korn シェルは最初の要素だけをエクスポートします。 ksh93 も一部の exec を実行します Korn シェルの子にエクスポートされた変数属性を保持するための悪用。

ところで、変数名に大文字を使用することは、シェルで使用されるものと衝突する可能性があるため、悪い習慣と見なされています。また、Bash 3 では、エクスポート時に STRING という名前に問題があります (Bash 4 で修正されました)。


Linux
  1. UNIX シェル スクリプトからファイルを ftp およびダウンロードする方法

  2. Linux シェル スクリプトまたは変数の日付と時刻の書式設定

  3. コマンドがゼロ以外の値を返した場合にシェルスクリプトを中止する

  1. シェルスクリプトでファイルをコピーして上書きする

  2. UbuntuのPATH変数はどこに設定されていますか?

  3. bash スクリプトのコマンドとターミナルのコマンドの違い

  1. Linux環境変数:LinuxVPSでの読み取りと設定の方法

  2. Linuxで環境変数とシェル変数を設定/作成する方法

  3. bash + bashスクリプトでファイルから変数と値を読み取る