如何将字符串附加到Bash数组的每个元素?

时间:2011-06-21 13:35:45

标签: arrays bash

我在Bash中有一个数组,每个元素都是一个字符串。如何在每个元素上附加另一个字符串?在Java中,代码类似于:

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

4 个答案:

答案 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