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 ?
itérer sur un nom de variable (script bash) Le sujet est résolu
-
- Modérateur
- Messages : 896
- 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 :
Mais il y a peut-être une autre méthode que je ne connais pas encore…
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
- piratebab
- Site Admin
- Messages : 5852
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En 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
Je ne pensais pas que un truc aussi simple fonctionnerai! je vais tester
- dezix
- Membre hyper actif
- Messages : 3548
- Inscription : 04 juin 2016, 14:50
- Status : Hors-ligne
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 #
}
#
#################################
**Simple Utilisateur** -- Debian stable - XFCE
-
- Modérateur
- Messages : 896
- Inscription : 16 avr. 2016, 22:14
- Status : Hors-ligne
Bonjour
Pour pouvoir visualiser la page du manuel de bash dans sa version non traduite concernant le Remplacement des paramètres :
Si votre compte utilisateur a été paramétré (voir la commande locale) pour utiliser le français
pour pouvoir visualiser la page du manuel de bash dans sa version traduite en français concernant le Remplacement des paramètres :
Pour pouvoir visualiser la page du manuel de bash dans sa version non traduite concernant le Remplacement des paramètres :
Code : Tout sélectionner
LANG=C man --pager='less -p "^\s+Parameter Expansion"' bash
pour pouvoir visualiser la page du manuel de bash dans sa version traduite en français concernant le Remplacement des paramètres :
Code : Tout sélectionner
man --pager='less -p "Remplacement des paramètres$"' bash
- vv222
- Membre actif
- Messages : 852
- Inscription : 18 avr. 2016, 20:14
- Contact :
- Status : Hors-ligne
L’approche proposée par MicP est beaucoup plus simple, mais nécessite l’utilisation de Bash.
Celle que j’utilise avec ./play.it est plus complexe (il faut passer par une fonction dédiée) mais devrait fonctionner avec toutes les implémentations de /bin/sh.
Pour info, la version actuelle du code partagé par dezix :
(source)
Le test variable_is_set est détaillé dans la source donnée en lien, et peut être omis si on ne bosse pas avec set -o nounset.
Celle que j’utilise avec ./play.it est plus complexe (il faut passer par une fonction dédiée) mais devrait fonctionner avec toutes les implémentations de /bin/sh.
Pour info, la version actuelle du code partagé par dezix :
Code : Tout sélectionner
# expand the given variable name and print its value
# USAGE: get_value $variable_name
# RETURN: the variable value
get_value() {
local variable_name
variable_name="$1"
if ! variable_is_set "$variable_name"; then
error_variable_not_set "$variable_name"
return 1
fi
eval printf -- '%b' \"\$"${variable_name}"\"
}
Le test variable_is_set est détaillé dans la source donnée en lien, et peut être omis si on ne bosse pas avec set -o nounset.
-
- Modérateur
- Messages : 896
- Inscription : 16 avr. 2016, 22:14
- Status : Hors-ligne
Effectivement, j'avais répondu à la question posée dans ce fil de discussion dont le titre est : itérer sur un nom de variable (script bash)
donc, en utilisant l'interpréteur de commande /bin/bash
Mais si la proposition de solution faite par vv222 semble plus complexe
elle a pour avantage de pouvoir fonctionner aussi bien avec /bin/bash
qu'avec /bin/sh qui, sur debian (et Ubuntu) est un lien vers /bin/dash
donc, en utilisant l'interpréteur de commande /bin/bash
Mais si la proposition de solution faite par vv222 semble plus complexe
elle a pour avantage de pouvoir fonctionner aussi bien avec /bin/bash
qu'avec /bin/sh qui, sur debian (et Ubuntu) est un lien vers /bin/dash
Code : Tout sélectionner
mic@deb116:~$ which sh
/usr/bin/sh
mic@deb116:~$ ls -l /usr/bin/sh
lrwxrwxrwx 1 root root 4 5 janv. 13:03 /usr/bin/sh -> dash
mic@deb116:~$