43 votes

Comment ajouter une chaîne de caractères à chaque élément d'un tableau Bash ?

J'ai un tableau dans Bash, chaque élément est une chaîne de caractères. Comment puis-je ajouter une autre chaîne à chaque élément ? En Java, le code est quelque chose comme :

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

108voto

ataraxic Points 319

Comme mentionné par Hal

  array=( "${array[@]/%/_content}" )

ajoutera la chaîne '_content' à chaque élément.

  array=( "${array[@]/#/prefix_}" )

ajoutera la chaîne 'prefix_' à chaque élément.

101voto

hal Points 1011

Vous pouvez ajouter une chaîne à chaque élément du tableau, même sans boucle dans Bash !

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

17voto

Rajish Points 2419

Testé, et ça marche :

array=(a b c d e)
cnt=${#array[@]}
for ((i=0;i<cnt;i++)); do
    array[i]="${array[i]}$i"
    echo "${array[i]}"
done

produit :

a0
b1
c2
d3
e4

EDIT : déclaration de la array pourrait être raccourci en

array=({a..e})

Pour vous aider à comprendre les tableaux et leur syntaxe dans bash, la fonction référence est un bon début. Je vous recommande également bash-hackers l'explication.

2voto

Steve Prentice Points 7638

Vous passez la longueur du tableau comme index pour l'affectation. La longueur est basée sur 1 et le tableau est indexé sur 0, donc en passant la longueur vous dites à bash d'assigner votre valeur à l'emplacement après le dernier dans le tableau. Pour obtenir la longueur d'un tableau, vous utilisez ceci ${array[@]} la syntaxe.

declare -a array
array[${#array[@]}]=1
array[${#array[@]}]=2
array[${#array[@]}]=3
array[${#array[@]}]=4
array[${#array[@]}]=5
echo ${array[@]}

Produit

1 2 3 4 5

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X