2011-06-21 60 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

相关问题