GNU/Linux >> Znalost Linux >  >> Linux

Jak změnit název proměnné Bash ve smyčce a poté rozbalit změněný název?

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:

  1. Jak získám požadovaný výstup podle obrázku?
  2. 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
  1. Jak změnit název rozhraní v CentOS/RHEL 8 pomocí prefixdevname

  2. Jak poznám název souboru skriptu ve skriptu Bash?

  3. Jak změnit jazyk mého git?

  1. Jak získat stav ukončení smyčky v bash

  2. Jak mohu spočítat počet znaků v proměnné Bash

  3. Jak provést třídění ls podle přípony souboru a poté názvu?

  1. Jak změnit výchozí správce plochy v debianu?

  2. Jak změnit rozlišení Bash pro Debian VM?

  3. Jak rychle změnit první slovo v příkazu Bash?