Je suis un nouvel apprenti bash
. J'ai un tableau dans bash
prenant l'entrée de l'entrée standard. Je dois me concaténer deux fois. Dis, j'ai les éléments suivants dans le tableau:
Namibia
Nauru
Nepal
Netherlands
NewZealand
Nicaragua
Niger
Nigeria
NorthKorea
Norway
Maintenant, le résultat devrait être:
Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Norway Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Norway
Mon code est:
countries=()
while read -r country; do
countries+=( "$country" )
done
countries=countries+countries+countries # this is the wrong way, i want to know the right way to do it
echo "${countries[@]}"
Notez que je peux l’imprimer trois fois comme le code ci-dessous, mais ce n’est pas ma devise. Je dois les concaténer dans le tableau.
countries=()
while read -r country; do
countries+=( "$country" )
done
echo "${countries[@]} ${countries[@]} ${countries[@]}"
Tout d’abord, pour lire votre liste dans un tableau, une entrée par ligne:
readarray -t countries
... ou, avec les anciennes versions de bash:
# same, but compatible with bash 3.x; && is to avoid non-zero exit status.
IFS=$'\n' read -r -d '' countries && (( ${#countries[@]} ))
Deuxièmement, pour dupliquer les entrées, développez le tableau trois fois:
countries=( "${countries[@]}" "${countries[@]}" "${countries[@]}" )
... ou utilisez la syntaxe moderne pour effectuer un ajout:
countries+=( "${countries[@]}" "${countries[@]}" )
Écrivez simplement ceci:
countries=$(cat)
countries+=( "${countries[@]}" "${countries[@]}" )
echo ${countries[@]}
La première ligne consiste à prendre un tableau en entrée, la seconde à concaténer et la dernière à l’imprimer.
sur Ubuntu 14.04, les éléments suivants concaténeraient trois éléments (un nombre d’éléments donnerait: 3), chaque élément étant un tableau countries
:
countries=( "${countries[@]}" "${countries[@]}" "${countries[@]}" )
alors que ci-dessous concaténerait tous les éléments dans un seul tableau:
countries=( ${countries[*]} ${countries[*]} ${countries[*]} )
le nombre serait de 30 (compte tenu des pays spécifiés dans le message d'origine).