2017-08-06 8 views
0

変数free_memlistのインデックス付き配列を作成しようとしていますが、最初のものだけを印刷しています。しかし、ループの内部では問題ありません。なぜ2番目の要素が配列にないのですか?

コード:

#!/usr/bin/bash 
eval array_host=($(xe host-list params=uuid | cut -c 17-)) 
#Loop through each xen server node 

for i in ${array_host[@]}; 

do 

free_mem1=$(xe host-data-source-query data-source=memory_free_kib uuid=$i) 

free_mem=(${free_mem1/\.*}) 


done 

host_memlist=($free_mem) 
echo ${array_host[0]} 
echo ${array_host[1]} 
echo ${free_mem[0]} 
echo ${free_mem[1]} 

出力:

63c2fe78-48c2-4c48-b7dd-f68f8639a7af 
6264dd23-76c9-4905-894f-a5fb212aa8dc 
2921184 

予想される出力:コマンドの

63c2fe78-48c2-4c48-b7dd-f68f8639a7af 
6264dd23-76c9-4905-894f-a5fb212aa8dc 
2921184 
2721184 

出力ます。xe host-リストのparams = UUID |以下のように-c 17-カット:

63c2fe78-48c2-4c48-b7dd-f68f8639a7af 


6264dd23-76c9-4905-894f-a5fb212aa8dc 

コードが悪いのか分かりません。

+0

'xe host-list params = uuid |の出力を追加します。 cut -c 17-'をあなたの質問にします。 – Cyrus

+0

@Cyrus、コマンドの出力を確認してください。ありがとう。 – rmstmg

+1

なぜ 'eval'を使うのですか? 'array_host'はそれを呼び出さずに塗りつぶされます。 –

答えて

1

リクエストに応じて回答を再送信します。

free_mem=(${free_mem1/\.*})$free_memに上書きされている行は、新しい配列のエントリーをしていません。配列への追加は+=で行います。期待どおりにその行をfree_mem+=(${free_mem1/\.*})に置き換えます。

関連する問題