2011-06-21 112 views
19

我在Bash中有一個數組,每個元素都是一個字符串。我怎樣才能追加另一個字符串到每個元素?在Java中,代碼如下所示:如何追加一個字符串到Bash數組的每個元素?

for (int i=0; i<array.length; i++) 
{ 
    array[i].append("content"); 
} 
+0

字符串是不可變的Java和沒有追加方法。 '不能找到符號 符號:方法追加(java.lang.String) location:class java.lang.String \t \t array [i] .append(「content」);'簡化的for-loop應該慢 - after 5年 - 也被採納。 'for(String s:array)System.out.println(s +「content」);' –

回答

13

測試,它的工作原理:

array=(a b c d e) 
cnt=${#array[@]} 
for ((i=0;i<cnt;i++)); do 
    array[i]="${array[i]}$i" 
    echo "${array[i]}" 
done 

生產:

a0 
b1 
c2 
d3 
e4 

編輯:array的聲明可以縮短爲

array=({a..e}) 

爲了幫助您理解在bash中的陣列及其語法reference是一個好的開始。另外我建議你bash-hackers的解釋。

+0

它的工作原理......但有點混亂。你能解釋「{}」是什麼意思,就像在$ {array [i]}中一樣嗎?爲什麼不是$ array [$ i]? – Richard

+3

@Richard:不幸的是,與bash數組一起工作的語法是......奧術來表達它的溫和;我不相信它可以解釋 - 比bash的手冊頁更好。 (此外,這可以作爲我的「保留標誌」) – sehe

+0

'array [i] =「$ {array [i]} $ i」'可以簡化爲:array [$ i] + =「$我「' –

2

您傳遞數組的長度作爲賦值的索引。長度是基於1的,並且數組是基於0的索引,所以通過傳遞長度告訴bash將數值分配給數組中最後一個之後的插槽。要獲得數組的長度,可以使用這個${array[@]}語法。

declare -a array 
array[${#array[@]}]=1 
array[${#array[@]}]=2 
array[${#array[@]}]=3 
array[${#array[@]}]=4 
array[${#array[@]}]=5 
echo ${array[@]} 

主要生產

1 2 3 4 5 
+0

很好的答案。令人遺憾的是,所需的語法(罪惡稅)不能充分感嘆 – sehe

+0

只是重讀這個問題,並意識到我回答了一些稍微不同的東西。我會在這裏留下這個答案,因爲它仍然有一些關於bash中數組的有價值的信息。 –

+0

'array + =(1)'; '陣列+ =(2)'; ...'array + =(etc)' –

66

即使沒有在Bash中循環,也可以向每個數組項添加一個字符串!

# cf. http://codesnippets.joyent.com/posts/show/1826 
array=(a b c d e) 
array=("${array[@]/%/_content}") 
printf '%s\n' "${array[@]}" 
+0

好的!這不是問題的確切答案,而是短期競爭的毋庸置疑的贏家! +1 – Rajish

+2

Joyent鏈接已損壞,請參閱http://web.archive.org/web/20101114051536/http://codesnippets.joyent.com/posts/show/1826(該鏈接的Wayback Machine)。 –

+1

注意:這確實在內部循環。 –

52

如HAL

array=("${array[@]/%/_content}") 

提到將附加 '內容' 的字符串的每個元素。

array=("${array[@]/#/prefix_}") 

將前面加上「prefix_」字符串每個元素

+8

謝謝。我實際上是在尋找一個字符串前綴,所以你的'#'加法對我來說非常有用。 – guaka

+0

這簡潔明瞭,應該是被接受的答案。它適用於任何[字符串操作](http://tldp.org/LDP/abs/html/string-manipulation.html),並將操作應用於每個數組元素。 – starfry

相關問題