Linux
bash +如何用實例號定義數組變數
是否可以將名為 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”命令?.