Подтвердить что ты не робот

Как добавить строку к каждому элементу массива Bash?

У меня есть массив в Bash, каждый элемент является строкой. Как добавить новую строку в каждый элемент? В Java код выглядит примерно так:

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

Ответ 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[@]}

Выдает

1 2 3 4 5