GNU/Linux >> Tutoriels Linux >  >> Linux

Comment changer le nom d'une variable bash dans une boucle, puis développer le nom modifié ?

J'essaie d'étendre les variables Bash. J'ai cherché mais je ne suis pas sûr des termes de recherche pour ce que j'essaie de faire.
Voici mon code.
Deux questions :

  1. Comment puis-je obtenir le résultat souhaité comme indiqué ?
  2. Quelle est la terminologie Bash pour décrire ce que je veux ici ?
# Set Library install directories
install_dir_1=~/Desktop/arduino-1.8.4
install_dir_2=~/Desktop/arduino-1.8.5
install_dir_3=~/Desktop/arduino-1.8.5a

x=0

while [ $x -lt 4 ]; do

    let x=x+1 

    install_dir=install_dir_$x
    #echo $install_dir

    install_dir=$install_dir   
    #echo $install_dir

    dir_Adafruit_SSD1306=$install_dir/libraries/Adafruit_SSD1306/
    echo $dir_Adafruit_SSD1306

done

La sortie réelle est

install_dir_1/libraries/Adafruit_SSD1306/
install_dir_2/libraries/Adafruit_SSD1306/
install_dir_3/libraries/Adafruit_SSD1306/
install_dir_4/libraries/Adafruit_SSD1306/

La sortie souhaitée est

~/Desktop/arduino-1.8.4/libraries/Adafruit_SSD1306/
~/Desktop/arduino-1.8.5/libraries/Adafruit_SSD1306/
~/Desktop/arduino-1.8.5a/libraries/Adafruit_SSD1306/

Réponse acceptée :

C'est ce qu'on appelle des variables de déréférencement et, bien que possible, ce n'est vraiment pas nécessaire ici. Donc, oui, vous pouvez utiliser la même approche et utiliser le déréférencement comme indiqué ci-dessous :

#!/bin/bash
# Set Library install directories
install_dir_1=~/Desktop/arduino-1.8.4
install_dir_2=~/Desktop/arduino-1.8.5
install_dir_3=~/Desktop/arduino-1.8.5a

x=1

while [ $x -lt 4 ]; do
    ## Set the instal_dir variable to point to the
    ## name of the variable you want to dereference
    install_dir="install_dir_$x"
    ## Dereference the variable using the ${!var} notation
    install_dir=${!install_dir}

    dir_Adafruit_SSD1306="$install_dir/libraries/Adafruit_SSD1306/"
    echo "$dir_Adafruit_SSD1306"
    let x=x+1 

done

Mais c'est vraiment beaucoup trop complexe. Voici une version simplifiée qui fait la même chose :

#!/bin/bash
install_dirs=("~/Desktop/arduino-1.8.4" 
              "~/Desktop/arduino-1.8.5" 
              "~/Desktop/arduino-1.8.5a")

for((x=0;x<${#install_dirs[@]};x++)); do 
    install_dir=${install_dirs[$x]}
    echo "$install_dir"
done

Linux
  1. Comment changer la variable PATH sous Linux

  2. Comment changer la langue de mon git?

  3. Comment changer le répertoire dans Git Bash avec Git pour Windows ?

  4. Comment faire en sorte que ls soit trié par extension de fichier puis par nom?

  5. Comment changer le gestionnaire de bureau par défaut dans debian ?

Comment incrémenter et décrémenter une variable dans Bash (compteur)

Comment changer le nom d'hôte dans Debian 10

Comment changer le nom d'hôte sur Debian Linux

Astuces Ubuntu :comment changer la date et l'heure sur un ordinateur portable ou un ordinateur de bureau

Comment obtenir le statut de sortie d'une boucle dans bash

Comment puis-je compter le nombre de caractères dans une variable Bash