2013-01-17 183 views
1

我一直在爲一個新概念奮鬥 - 我在bash腳本中關聯數組。bash腳本將變量賦值給關聯數組

這裏被簡化我的代碼版本:

#!/bin/bash 
declare -A MYID 
MYID[hello]=world 
tac /home/user/filename | while read -r line; do 
    MYID[hello]=me 
done 
echo "${MYID[hello]}" 
exit 

這是我認爲它會做: 1)關聯數組聲明稱爲MYID MYID 2)價值世界分配給該鍵打招呼 3)讀取文件/ home /用戶/文件名向後一行每次讀取一行分配我到關鍵打招呼MYID陣列 5)打印出「我」和退出

在時間線 4)什麼它確實是打印出「世界」而不是「我」。我究竟做錯了什麼?

回答

2

該管道創建一個子shell,因此您在while循環中對MYID所做的任何更改只存在於該子shell中。試試這個:

while read -r line; do 
    MYID[hello]=me 
done < <(tac /home/user/filename) 
+0

謝謝你,這似乎工作。我會將其添加到我要學習的東西列表中。 – user1464409