2014-02-07 60 views
0

以下代碼不會輸出任何內容。Bash數組不工作?

#!/bin/bash 
declare -A a 
cat input.txt | while read item value 
do 
if [ $item="owner" ] || [ $item="admin" ] || [ $item="loc" ] || [ $item="ser"] 
then 
a[$item]=$value 
fi 
done 
echo ${a[owner]} 

輸入文件是:

owner sysadmin group 
admin ajr 
loc S-309 
ser 18r97 
comment noisy fan 

我需要創建陣列的僅在所有者,管理,在上述和SER索引。

我期待echo $ {a [owner]}的輸出是sysadmin組,等等。

任何幫助?

編輯: 我認爲它可能與所有者是sysadmin組有關係,我怎麼讀(空格的兩個單詞)到一個變量(值)?

+1

可能重複http://stackoverflow.com/questions/1789750/scope-of-variable-in-pipe –

回答

1

這是因爲你通過使用管道來使用子shell。在子外殼中所做的所有更改僅限於子外殼本地,並未反映在父外殼中。

使用此:

#!/bin/bash 
declare -A a 
while read item value 
do 
    if [ $item="owner" ] || [ $item="admin" ] || [ $item="loc" ] || [ $item="ser"] 
    then 
    a[$item]=$value 
    fi 
done < input.txt 

echo ${a[owner]} 
sysadmin group 
+0

我們的實際任務是寫一個腳本,將輸出類似於表中的內容,但是來自目錄的多個文件中,腳本需要一個命令行參數,即該目錄。所以我試圖編寫這部分,它將打開一個文件並將它們存儲到數組中,並在稍後調用它來執行該表。從我的理解中,我無法在這裏讀到管貓,否則我該怎麼做? – gptt916

+0

我爲您提供了工作代碼。而不是管道使用'done anubhava

+0

啊,對了,做完了<檔案應該訣竅,我完全錯過了那部分,謝謝! – gptt916