Linux

bash +如何用實例號定義數組變數

  • May 18, 2015

是否可以將名為 machine1 的變數定義為 machine$counter ( while counter=1 ) ?

例如,我創建了/tmp/config.txt文件並將 machine1 設置為數組:

$ more /tmp/config.txt
machine1=( linux_server critical 1.1.1.1 )
machine2=( linux_server critical 1.1.1.2 )
.
.

然後我創建了以下簡單腳本來讀取/tmp/config.txt. 我嘗試按如下方式列印機器數組:

$ more read.config.bash
#!/bin/bash

source /tmp/config.txt
counter=1
echo ${machine$counter[0]}
echo ${machine$counter[1]}
echo ${machine$counter[2]}
.
.

但是當我執行腳本時,我得到:

$ ./read.config.bash
./read.config.bash: line 6: ${machine$counter[0]}: bad substitution
./read.config.bash: line 7: ${machine$counter[1]}: bad substitution
./read.config.bash: line 8: ${machine$counter[2]}: bad substitution

這個問題的解決方案是什麼?

使用eval命令。

eval "echo \${machine${counter[0]}}"

請注意,第一個$已轉義,因此在eval處理字元串之前不會對其進行評估。

它的工作方式是eval執行一個命令,就像您在命令提示符下鍵入它一樣。不同之處在於執行的命令可以以程式方式構造。

因此,在您的場景中,當eval在命令上執行時,它實際執行的命令如下所示echo ${machineBLAH}在執行之前 ,shell 已經單獨執行了內部變數替換eval

有關更多資訊,請參閱另一篇文章:什麼是 bash 中的“eval”命令?.

引用自:https://unix.stackexchange.com/questions/204092