Saya mencoba memperluas variabel Bash. Saya telah menelusuri tetapi tidak yakin apa istilah penelusuran untuk apa yang saya coba lakukan.
Ini kode saya.
Dua pertanyaan:
- Bagaimana cara mendapatkan hasil yang diinginkan seperti yang ditunjukkan?
- Apa terminologi Bash untuk menggambarkan apa yang saya inginkan di sini?
# 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
Keluaran sebenarnya adalah
install_dir_1/libraries/Adafruit_SSD1306/
install_dir_2/libraries/Adafruit_SSD1306/
install_dir_3/libraries/Adafruit_SSD1306/
install_dir_4/libraries/Adafruit_SSD1306/
Keluaran yang diinginkan adalah
~/Desktop/arduino-1.8.4/libraries/Adafruit_SSD1306/
~/Desktop/arduino-1.8.5/libraries/Adafruit_SSD1306/
~/Desktop/arduino-1.8.5a/libraries/Adafruit_SSD1306/
Jawaban yang Diterima:
Ini disebut variabel dereferencing dan, jika memungkinkan, benar-benar tidak diperlukan di sini. Jadi, ya, Anda bisa menggunakan pendekatan yang sama dan menggunakan dereferensi seperti yang ditunjukkan di bawah ini:
#!/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
Tapi ini benar-benar terlalu rumit. Ini adalah versi sederhana yang melakukan hal yang sama:
#!/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 – Mengkompilasi Dan Menginstal Kernel.org Kernel Ke Volume Kustom Pada Disk?
Perbedaan Antara 'env' dan 'printenv'?