GNU/Linux >> Linux の 問題 >  >> Linux

ループ内のBash変数名を変更してから、変更した名前を展開する方法は?

変数Bashを拡張しようとしています。検索しましたが、実行しようとしていることに対する検索用語がわかりません。
これが私のコードです。
2つの質問:

  1. 図のように目的の出力を取得するにはどうすればよいですか?
  2. ここで欲しいものを説明するための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=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

実際の出力は

です
install_dir_1/libraries/Adafruit_SSD1306/
install_dir_2/libraries/Adafruit_SSD1306/
install_dir_3/libraries/Adafruit_SSD1306/
install_dir_4/libraries/Adafruit_SSD1306/

必要な出力は

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

承認された回答:

これは逆参照変数と呼ばれ、可能ではありますが、ここでは実際には必要ありません。したがって、はい、以下に示すように、同じアプローチを使用して間接参照を使用できます。

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

しかし、これは本当に複雑すぎます。同じことを行う簡略化されたバージョンは次のとおりです。

#!/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. prefixdevname を使用して CentOS/RHEL 8 のインターフェイス名を変更する方法

  2. Bash変数の文字数をカウントするにはどうすればよいですか

  3. Git for Windows で Git Bash のディレクトリを変更するにはどうすればよいですか?

  1. ls をファイル拡張子でソートしてから名前を付ける方法は?

  2. Debian でデフォルトのデスクトップ マネージャを変更するにはどうすればよいですか?

  3. Debian VM の Bash の解像度を変更するにはどうすればよいですか?

  1. .bashrcの目的とそれはどのように機能しますか?

  2. ターミナルでループバッシュスクリプトを停止する方法は?

  3. IP アドレスとゲートウェイ アドレスを永続的に変更するにはどうすればよいですか?