2014-08-29 97 views
0

我在for循環中分配一個變量,我從提供的輸入中創建一個輸出文件名。For循環中奇怪的Bash變量賦值行爲

我從來沒有任何問題與數組或循環之前,但行爲是非常奇怪的。我在代碼中的其他地方使用了類似的循環,它們都可以正常工作。下面的代碼工作正常,變量按預期分配。

count=1 

for i in "${INPUT[@]}" 
do 
    local INPUT[$count]=`echo -n "$i" | sed 's/\(.\)/\1\n/g'` 

    let count=count+1 
done 

這一切都按預期工作,但下面的代碼不起作用。

count=1 

for i in "${INPUT[@]}" 
do 
    local OUTFILE[$count]="$i" 

    let count=count+1 
done 

如果我附和了$ INPUT [$計數]或$我得到我的預期結果的價值,但是,當我回聲出的分配之後OUTFILE $ [$ count]的數值,它出來爲[1],[2],[3]等,而不是人的名字,人的名字,人的名字,等

+0

什麼是這裏的'local'關鍵字的目的是什麼? – tripleee 2014-08-29 14:07:04

+1

它在函數裏面 – Arcana 2014-08-29 14:07:59

+0

我以前沒見過這個用法。它是否將整個數組轉換爲局部變量?或者只是這個條目?有沒有這種語法的參考? – tripleee 2014-08-29 14:09:15

回答

4

這聽起來像你一樣

echo $OUTFILE[$count] 

寫東西的時候,你應該寫作

echo ${OUTFILE[$count]} 
+0

是的,那是我我現在覺得很傻。它是作爲完整文件路徑的一部分的較大字符串連接的一部分,並且我將大括號錯誤放置。謝謝! – Arcana 2014-08-29 14:07:25

2

要複製一個陣列到另一個陣列BASH你不需要一個循環,你可以這樣做:

OUTFILE=("${INPUT[@]}") 
+1

謝謝!這不是問題的原因,但知道這是一件好事,謝謝! 雖然,我對此很好奇,因爲我沒有在文檔中看到它,Vim用紅色突出顯示右邊的外括號來建議無效的語法。 – Arcana 2014-08-29 14:12:54

+1

@Kervate沒有什麼需要在文檔中直接調用這樣的東西。這只是正常的數組構造,其中的值是從另一個數組的所有元素的擴展中獲取的。 vim不應該錯誤地突出顯示,儘管(儘管可能不在bash模式中,但我認爲這也是一個錯誤)。 – 2014-08-29 14:17:03

+0

是的vim突出顯示有許多模式,並且更好地選擇BASH模式以獲得正確的語法突出顯示。 – anubhava 2014-08-29 14:22:38