shell中變數的變數與eval命令

2021-08-25 11:08:44 字數 1324 閱讀 2974

**:

shell 中經常會用到變數的巢狀的情況。比如,單個或多個變數的值作為變數名,再對該變數名取$獲取其內部的變數的情況,這種指令碼寫起來很難搞,還好有eval 命令方便我們處理這種情況。便於理解,先來乙個示例:

#!/bin/bash

a='my'

b='site'

my_site='my site www.361way.com'

echo a_b is "$a"_"$b"

echo $("$a"_"$b")

web="$a"_"$b"

echo web is $web

eval echo '$'"$a"_"$b"

eval echo '$'

比如上面這個示例,猜猜看它的執行結果是什麼?執行結果如下:

# sh a.sh

a_b is my_site

a.sh: line 6: my_site: command not found

web is my_site

my site www.361way.com

my site www.361way.com

從上面可以看出$("$a"_"$b")這種寫法會報錯,可以正確取到我們想要的結果可以有兩種寫法:eval echo '$'"$a"_"$b" 或 eval echo '$' 。

eval 這麼神奇,到底是個什麼東東?

eval 命令將會首先掃瞄命令列進行所有的置換,然後再執行該命令。該命令適用於那些一次掃瞄無法實現其功能的變數,該命令對變數進行兩次掃瞄。這些需要進行兩次掃瞄的變數有時被稱為複雜變數。eval命令即可以用於回顯簡單變數,也可以用於回顯複雜變數。

再來個示例,該例中檔案有兩列,第一列為變數名,第二列為變數值,讀取該檔案後將第二列的值賦值給第一列,通過echo $ 就可以獲取後面的value值。如下:

變數名與變數值對映表:

# more name_value.txt

site www.361way.com

mail [email protected]

user admin

指令碼內容:

# cat b.sh

#!/bin/bash

while read name value

doeval "$=$"

done < name_value.txt

echo "$site $mail $user"

執行該指令碼,結果如下:

# sh b.sh

www.361way.com [email protected] admin

Shell中的函式與變數

方法1 函式名 方法2 function 函式名 bin bash function fun1 fun1 呼叫函式 root server cat function.sh bin bash function fun1 count 1 while count le 5 do fun1 count co...

shell中的變數

只寫了部分常用變數 2018.5.14 環境變數 隨不同環境變化 user pwd path pid root 下 user root quguanwen下 user quguanwen 預定義變數 命令返回值檢視狀態 列出所有位置變數的值 一共載入多少位置變數 位置變數 1 2 3 x 執行指令碼...

shell中的變數

echo 123 passwd stdin yee 一次性給使用者加密碼 變數的定義 變數即在程式執行過程中它的值是允許改變的量 變數是用一串固定的字元來標示不固定的值的一種方法 變數是一種使用方便的佔位符,用於引用計算機記憶體位址,該地 址可以儲存 script 執行時可更改的程式資訊 在 she...