我在Bash中有一个数组,每个元素都是一个字符串。如何在每个元素上附加另一个字符串?在Java中,代码类似于:
for (int i=0; i<array.length; i++)
{
array[i].append("content");
}
答案 0 :(得分:84)
即使没有在Bash中循环,也可以为每个数组项附加一个字符串!
# cf. http://codesnippets.joyent.com/posts/show/1826
array=(a b c d e)
array=( "${array[@]/%/_content}" )
printf '%s\n' "${array[@]}"
答案 1 :(得分:72)
如hal
所述 array=( "${array[@]/%/_content}" )
会将'_content'字符串附加到每个元素。
array=( "${array[@]/#/prefix_}" )
将'prefix_'字符串添加到每个元素
答案 2 :(得分:16)
经过测试,确实有效:
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解释。
答案 3 :(得分: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