Snažím se rozšířit proměnné Bash. Hledal jsem, ale nejsem si jistý, jaké jsou hledané výrazy pro to, co se snažím udělat.
Zde je můj kód.
Dvě otázky:
- Jak získám požadovaný výstup podle obrázku?
- Jaká je Bashova terminologie pro popis toho, co zde chci?
# 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
Skutečný výstup je
install_dir_1/libraries/Adafruit_SSD1306/
install_dir_2/libraries/Adafruit_SSD1306/
install_dir_3/libraries/Adafruit_SSD1306/
install_dir_4/libraries/Adafruit_SSD1306/
Požadovaný výstup je
~/Desktop/arduino-1.8.4/libraries/Adafruit_SSD1306/
~/Desktop/arduino-1.8.5/libraries/Adafruit_SSD1306/
~/Desktop/arduino-1.8.5a/libraries/Adafruit_SSD1306/
Přijatá odpověď:
Říká se tomu dereferenční proměnné a, i když je to možné, zde to opravdu není nutné. Takže ano, můžete použít stejný přístup a použít dereferencování, jak je uvedeno níže:
#!/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
Ale tohle je opravdu příliš složité. Zde je zjednodušená verze, která dělá totéž:
#!/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 – kompilace a instalace jádra Kernel.org do vlastního svazku na disku?
Rozdíl mezi „env“ a „printenv“?