GNU/Linux >> Linux Esercitazione >  >> Linux

Come modificare il nome di una variabile Bash in un ciclo e quindi espandere il nome modificato?

Sto cercando di espandere le variabili Bash. Ho cercato ma non sono sicuro di quali siano i termini di ricerca per quello che sto cercando di fare.
Ecco il mio codice.
Due domande:

  1. Come ottengo l'output desiderato come mostrato?
  2. Qual ​​è la terminologia di Bash per descrivere ciò che voglio qui?
# 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

L'output effettivo è

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

L'output desiderato è

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

Risposta accettata:

Si chiama dereferenziazione delle variabili e, sebbene possibile, non è davvero necessario qui. Quindi, sì, potresti utilizzare lo stesso approccio e utilizzare la dereferenziazione come mostrato di seguito:

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

Ma questo è davvero troppo complesso. Ecco una versione semplificata che fa la stessa cosa:

#!/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. Come modificare il nome dell'interfaccia in CentOS/RHEL 8 usando prefixdevname

  2. Come faccio a conoscere il nome del file di script in uno script Bash?

  3. Come cambio la directory in Git Bash con Git per Windows?

  4. Come ordinare ls per estensione di file e quindi per nome?

  5. Come cambiare il desktop manager predefinito in debian?

Come aumentare e diminuire la variabile in Bash (counter)

Come modificare il nome host in Debian 10

Come modificare il nome host su Debian Linux

Suggerimenti per Ubuntu:come modificare la data e l'ora su laptop o desktop

Come ottenere lo stato di uscita un ciclo in bash

Come posso contare il numero di caratteri in una variabile Bash