Как добавить строку к каждому элементу массива Bash?
У меня есть массив в Bash, каждый элемент является строкой. Как добавить новую строку в каждый элемент? В Java код выглядит примерно так:
for (int i=0; i<array.length; i++)
{
array[i].append("content");
}
Ответ 1
Протестировано, и оно работает:
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
EDIT: объявление array может быть сокращено до
array=({a..e})
Чтобы помочь вам понять массивы и их синтаксис в bash, ссылка является хорошим началом. Также я рекомендую вам bash-hackers.
Ответ 2
Вы можете добавить строку к любому элементу массива, даже не зациклив на Bash!
# cf. http://codesnippets.joyent.com/posts/show/1826
array=(a b c d e)
array=( "${array[@]/%/_content}" )
printf '%s\n' "${array[@]}"
Ответ 3
Как упомянуто хал
array=( "${array[@]/%/_content}" )
добавит строку _content к каждому элементу.
array=( "${array[@]/#/prefix_}" )
добавит строку 'prefix_' к каждому элементу
Ответ 4
Вы передаете длину массива как индекс для назначения. Длина равна 1, а массив индексируется на основе 0, поэтому, передавая длину, вы сообщаете bash назначить свое значение слоту после последнего в массиве. Чтобы получить длину массива, используйте этот синтаксис ${array[@]}.
declare -a array
array[${#array[@]}]=1
array[${#array[@]}]=2
array[${#array[@]}]=3
array[${#array[@]}]=4
array[${#array[@]}]=5
echo ${array[@]}