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 :
- Comment puis-je obtenir le résultat souhaité comme indiqué ?
- 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