Basé sur un tableau associatif dans un script Bash, j'ai besoin de parcourir pour obtenir la clé et la valeur. Je ne comprends pas vraiment comment obtenir la clé lors de l'utilisation d'une boucle de préinclusion.Comment faire une itération sur des tableaux associatifs dans Bash
Répondre
Les touches sont accessibles à l'aide d'un point d'exclamation: ${!array[@]}
, la Les valeurs sont accessibles à l'aide de ${array[@]}
.
Vous pouvez parcourir les paires clé/valeur comme celle-ci:
for i in "${!array[@]}"
do
echo "key : $i"
echo "value: ${array[$i]}"
done
Notez l'utilisation des guillemets autour de la variable dans l'instruction for
(plus l'utilisation de @
au lieu de *
). Ceci est nécessaire dans le cas où les clés comprennent des espaces.
La confusion dans l'autre réponse provient du fait que votre question comprend "foo" et "bar" pour les deux clés et les valeurs.
Ceci est maintenant si assigner toutes les clés à un tableau: 'array = ($ {! hash [@]})' –
@ Michael-O: Vous avez besoin pour citer l'expansion des paramètres pour protéger les clés qui peuvent avoir des espaces: 'array = (" $ {! hash [@]} ")' –
@DennisWilliamson, merci beaucoup. Je n'avais pas ça en tête. –
Vous pouvez accéder aux clés avec ${!array[@]}
:
bash-4.0$ echo "${!array[@]}"
foo bar
Ensuite, itérer sur les clés/paires de valeurs est facile:
for i in "${!array[@]}"
do
echo "key :" $i
echo "value:" ${array[$i]}
done
Utilisez cette fonction d'ordre supérieur pour empêcher la pyramid of doom
foreach(){
arr="$(declare -p $1)" ; eval "declare -A f="${arr#*=};
for i in ${!f[@]}; do $2 "$i" "${f[$i]}"; done
}
exemple:
$ bar(){ echo "$1 -> $2"; }
$ declare -A foo["flap"]="three four" foo["flop"]="one two"
$ foreach foo bar
flap -> three four
flop -> one two
Je ne suis pas sûr de savoir comment cela est applicable? La pyramide du malheur n'est-elle pas une question purement esthétique et n'est-elle réellement applicable que dans les langages orientés objet? –
pourriez-vous l'expliquer? La fonction foreach est un peu difficile. Je ne comprends pas. –
- 1. Itération sur des tableaux avec moustache
- 2. Passer des tableaux associatifs dans call_user_func_array (...)
- 3. Tableaux associatifs en Javascript?
- 4. Comment faire une itération sur une TreeMap?
- 5. Tri basé sur des tableaux associatifs en D
- 6. tableaux associatifs multidimensionnels en JavaScript
- 7. Comment faire une itération sur div?
- 8. Comment faire une itération sur System.Windows.SystemParameters?
- 9. SimpleXML, tableaux associatifs et XPath
- 10. Comment effectuer une itération sur un tableau de tableaux
- 11. Accès tableaux associatifs en PHP
- 12. PHP: Utiliser des espaces dans les indices de tableaux associatifs
- 13. Comment fusionner 2 tableaux associatifs en PHP?
- 14. VBScript Tableaux associatifs anonymes? (Comme en Javascript)
- 15. Existe-t-il un moyen de faire des tableaux associatifs dans REXX?
- 16. valeurs stockées dans des tableaux associatifs ne sont pas définies
- 17. Appel de tableaux associatifs multidimensionnels dans des modèles
- 18. Utilisation de tableaux associatifs avec preg_replace
- 19. Fusion de plusieurs tableaux associatifs en PHP
- 20. varie de tableaux associatifs en D 2
- 21. Méthode concise pour transmettre des tableaux associatifs à la méthode
- 22. Est-ce que PowerShell a des tableaux associatifs?
- 23. Tableaux associatifs en javascript à JSON
- 24. comparaison de deux tableaux associatifs multidimensionnels s
- 25. Comment faire une itération sur deux listes - python
- 26. Comment faire une itération sur les arguments de fonction
- 27. Comment faire une itération en Ruby?
- 28. itération sur Regexp correspond à Sed et Bash?
- 29. Comment faire une itération arrière dans une liste STL?
- 30. Tie :: Tableaux associatifs ordonnés par IxHash dans Hash of Hashes?
$ déclarer tableau -A = ([foo] = bar [bar] = toto) # Initialiser tout à – anisbet
Pour une petite liste de valeurs clés, vous pouvez considérer ceci: 'pour i dans a, b c_s, d; faites KEY = $ {i%, *}; VAL = $ {i # *,}; echo $ KEY "XX" $ VAL; done' – math