GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Mengubah Nama Variabel Bash Dalam Loop Dan Kemudian Memperluas Nama yang Diubah?

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:

  1. Bagaimana cara mendapatkan hasil yang diinginkan seperti yang ditunjukkan?
  2. 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
  1. Bagaimana mengubah nama antarmuka di CentOS/RHEL 8 menggunakan prefixdevname

  2. Bagaimana cara mengubah bahasa git saya?

  3. Cara mendapatkan status keluar satu lingkaran di bash

  1. Bagaimana cara mengurutkan berdasarkan ekstensi file dan kemudian nama?

  2. Bagaimana cara mengubah resolusi Bash untuk VM Debian?

  3. Bagaimana saya bisa mengubah alamat IP dan gateway secara permanen?

  1. Tujuan .bashrc Dan Bagaimana Cara Kerjanya?

  2. Bagaimana Menghentikan Skrip Loop Bash Di Terminal?

  3. Bagaimana Cara Mengubah Panjang Baris Default Untuk Od Dan Hexdump?