GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie ändere ich einen Bash-Variablennamen in einer Schleife und erweitere dann den geänderten Namen?

Ich versuche, Variablen Bash zu erweitern. Ich habe gesucht, bin mir aber nicht sicher, was die Suchbegriffe für das sind, was ich versuche.
Hier ist mein Code.
Zwei Fragen:

  1. Wie bekomme ich die gewünschte Ausgabe wie gezeigt?
  2. Wie lautet die Bash-Terminologie, um zu beschreiben, was ich hier möchte?
# 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

Die tatsächliche Ausgabe ist

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

Gewünschte Ausgabe ist

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

Akzeptierte Antwort:

Es heißt Dereferenzieren von Variablen und ist hier, obwohl möglich, wirklich nicht notwendig. Also, ja, Sie könnten den gleichen Ansatz verwenden und die Dereferenzierung wie unten gezeigt verwenden:

#!/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

Aber das ist wirklich viel zu komplex. Hier ist eine vereinfachte Version, die dasselbe tut:

#!/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. So ändern Sie den Schnittstellennamen in CentOS/RHEL 8 mit prefixdevname

  2. Woher weiß ich den Namen der Skriptdatei in einem Bash-Skript?

  3. Wie ändere ich die Sprache meines Git?

  4. So erhalten Sie den Exit-Status in einer Bash-Schleife

  5. Wie lässt man ls nach Dateierweiterung und dann nach Name sortieren?

So erhöhen und verringern Sie die Variable in Bash (Zähler)

So ändern Sie den Hostnamen in Debian 10

So ändern Sie den Hostnamen unter Debian Linux

Ubuntu-Tipps:So ändern Sie Datum und Uhrzeit auf Laptop oder Desktop

Wie ändere ich den Standard-Desktop-Manager in Debian?

Wie ändere ich schnell das erste Wort in einem Bash-Befehl?