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

Ric*_*ard 36 arrays bash

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

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

小智 88

即使没有在Bash中循环,您也可以将字符串附加到每个数组项!

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

  • Joyent链接已损坏,请参阅http://web.archive.org/web/20101114051536/http://codesnippets.joyent.com/posts/show/1826(Wayback Machine for the link). (2认同)
  • 注意:这实际上是在内部循环的。 (2认同)

ata*_*xic 80

如hal所述

  array=( "${array[@]/%/_content}" )
Run Code Online (Sandbox Code Playgroud)

将'_content'字符串附加到每个元素.

  array=( "${array[@]/#/prefix_}" )
Run Code Online (Sandbox Code Playgroud)

将为每个元素添加'prefix_'字符串

  • 谢谢.我实际上是在寻找前置字符串,所以你的`#`添加对我来说非常有用. (10认同)
  • 如果同时前置和附加怎么办?/%/_content/#/prefix 似乎不起作用。 (3认同)
  • @ZFY:您需要执行两遍。 (3认同)

Raj*_*ish 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
Run Code Online (Sandbox Code Playgroud)

生产:

a0
b1
c2
d3
e4
Run Code Online (Sandbox Code Playgroud)

编辑:宣言array可以缩短为

array=({a..e})
Run Code Online (Sandbox Code Playgroud)

为了帮助您理解bash中的数组及其语法,引用是一个良好的开端.另外我建议你用bash-hackers解释.

  • @Richard:遗憾的是,使用bash数组所需的语法是......晦涩难懂; 我不相信它可以解释_easier_而不是bash的man-page.(此外,这对我来说是"远离标志") (3认同)
  • `array[i]="${array[i]}$i"` 可以简化为: `array[$i]+="$i"` (2认同)