eval命令
- eval命令將會首先掃描命令行進行所有的置換,然後再執行該命令。該命令適用於那些一次掃描無法實現其功能的變量,該命令對變量進行兩次掃描
範例
[root@server ~]# CMD=whoami
[root@server ~]# echo $CMD
whoami
[root@server ~]# eval $CMD
root
[root@server ~]# n=10
[root@server ~]# echo {0..$n}
{0..10}
[root@server ~]# eval echo {0..$n}
[root@centos6 ~]# n=10
[root@centos6 ~]# echo {1..$n}
{1..10}
[root@centos6 ~]# eval echo {1..$n}
1 2 3 4 5 6 7 8 9 10
這樣也可以
[root@centos6 ~]# cmd=whoami
[root@centos6 ~]# $cmd
root
- eval命令是先將變量替換成字符串,然後在執行字符串
間接變量引用
- 如果第一個變量的值是第二個變量的名字,從第一個變量引用第二個變量的值就稱爲間接變量引用
- variable1的值是variable2,而variable2又是變量名,variable2的值爲value,間接變量引用是通過variable1獲得變量值value的行爲
variable1=variable2 variable2=value
bash shell 提供兩種格式實現間接變量引用
eval tempvar=\$$variable1
tempvar=${!variable1}
- 這種事eval echo $
a當eval第一次把 a當做變量,第二次就把b做變量,當然必須加反斜槓轉義,不然 $shell會認爲是進程號
[root@centos6 ~]# echo ${!a}
c
範例
[root@server ~]# N=NAME
[root@server ~]# NAME=wangxiaochun
[root@server ~]# N1=${!N}
[root@server ~]# echo $N1
wangxiaochun
[root@server ~]# eval N2=\$$N
[root@server ~]# echo $N2
wangxiaochun