itérer sur un nom de variable (script bash) Le sujet est résolu

Tout ce qui concerne la programmation.
Répondre
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 4041
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Bonjour, je bloque sur un truc qui va vous sembler tout bête.
J'ai une série de variables qui s'appellent
entrée_1
entrée_2
....
entrée_20

Je dois faire le même traitement sur chaque d'elles donc une boucle FOR s'impose.
Mais comment itérer sur un morceau de nom ?
MicP
Modérateur
Modérateur
Messages : 812
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Bonjour

Un nom de variable dans lequel il y a une lettre accentuée, ça va pas le faire dans bash,
mais sans le caractère accentué, tu pourrais faire :

Code : Tout sélectionner

for numero in {1..20}; do 
    nomVar="entree_$numero"
    echo "Valeur de $nomVar : ${!nomVar}"
done
Mais il y a peut-être une autre méthode que je ne connais pas encore…
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 4041
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

l n'y a pas de é , c'était juste pour l'exemple. Ce sont en réalité les noms des ports de connexion de ma carte son dans Jack. J'ai un script pour faire les connexions/deconnexions automatiquement en début de session
Je ne pensais pas que un truc aussi simple fonctionnerai! je vais tester
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 4041
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

ça fonctionne parfaitement, merci!
Avatar de l’utilisateur
dezix
Modérateur
Modérateur
Messages : 2330
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

MicP a écrit : 24 nov. 2022, 04:26${!nomVar}
Est-ce que ça fonctionne dans tous les contextes ?

Car jusqu'à présent j'ai utilisé une fonction pompée dans les scripts ./play.it que vv222 a eu la gentillesse de me montrer,
mais c'est beaucoup plus compliqué, d'ailleurs j'ai déjà oublié les subtilités de son fonctionnement.

Code : Tout sélectionner

####	FONCTION	#############
#
# get the value of a variable and print it
# USAGE: get_value "variable_name"  (sans $)
get_value ()
{
	local name ;
	local value ;
	name="$1" ;
	value="$(eval printf -- '%b' \"\$$name\")" ;
	printf '%s' "$value" ; 
	#echo "$name vaut $value" ;		# test temporaire #
}
#
#################################
Debian stable - XFCE
Avatar de l’utilisateur
dezix
Modérateur
Modérateur
Messages : 2330
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Je vais m'auto-répondre en partie : :rtfm:

$ man --pager='less -p "^\s+Parameter Expansion"' bash

J'admets avoir de très grosses lacunes :blush:
Debian stable - XFCE
Répondre