私の bash の問題を説明する前に、いくつかのコンテキストを説明させてください。
現在の仕事で使用している bash の「フレームワーク」を使用して、いくつかのスクリプトを作成しています。フレームワークの機能の 1 つは、クラスター インフラストラクチャでジョブを実行するのに役立つ一連の環境変数を初期化することです。
$YY
これらの変数は、によって指定された日付に依存し、環境変数でも$mm
あり$dd
ます (はい、これは配線されています)。フレームワークを使用するには、まず日付を定義してから、関数を呼び出して他の変数を初期化します。これは、特定の日のみの変数を必要とするスクリプトを作成する場合にうまく機能します。今日、私は 2 日間の変数を必要とするものを書いています。これを書いていると、奇妙な問題に直面します。問題をよりよく理解するために、それをシミュレートする次のコードを書きました。
#!/bin/bash
function assign(){
date=$1
date[1]=$YY
date[2]=$mm
date[3]=$dd
}
function display() {
date=$1
echo "${date[1]}/${date[2]}/${date[3]}"
}
export YY=2012
export mm=09
export dd=20
declare -a my_date1=()
assign $my_date1
export YY=2012
export mm=08
export dd=20
declare -a my_date2=()
assign $my_date2
display $my_date1
display $my_date2
予想される出力は次のとおりです。
2012/09/20
2012/08/20
しかし、出力は次のとおりです。
2012/08/20
2012/08/20
最初は、割り当て関数が配列を値ではなく , への参照で埋めていると思い$YY
まし$mm
た$dd
。しかし、次のコードを試してみましたが、結果は変わりません。
date[1]=$(echo $YY)
date[2]=$(echo $mm)
date[3]=$(echo $dd)
誰かが私に何を追加するか説明できますか? たぶん何かが配線されていdate=$1
ます...