shell eval命令使用

eval命令將會首先掃描命令行進行全部的置換,而後再執行該命令。
該命令適用於那些一次掃描沒法實現其功能的變量。該命令對變量進行兩次掃描。
這些須要進行兩次掃描的變量有時被稱爲複雜變量。不過這些變量自己並不複雜。
eval命令也能夠用於回顯簡單變量,不必定是複雜變量。

1.eval命令也能夠用於回顯簡單變量,不必定是複雜變量
例如: 

[neau@mail ~]$ NAME=VALUEBANK
[neau@mail ~]$ eval echo $NAME
VALUEBANK
[neau@mail ~]$ echo $NAME
VALUEBANK

2.執行含有字符串的命令
首先咱們首先建立一個名爲test的小文件,在這個小文件中含有一些文本。接着,將cat test賦給變量myfile,如今咱們e c h o該變量,看看是否可以執行上述命令。
[neau@mail ~]$ vi test
[neau@mail ~]$ cat test
Hello World!!!
I am a chinese Boy!
將cat testf賦給變量myfile
[neau@mail ~]$ myfile="cat test"
若是咱們echo該變量,咱們將沒法列出test文件中的內容。
[neau@mail ~]$ echo $myfile
cat test
讓咱們來試一下eval命令,記住eval命令將會對該變量進行兩次掃瞄。
[neau@mail ~]$ eval $myfile
Hello World!!!
I am a chinese Boy!
從上面的結果能夠看出,使用eval命令不但能夠置換該變量,還可以執行相應的命令。第一次掃描進行了變量置換,
第二次掃描執行了該字符串中所包含的命令cat test。

3.命令還能夠用來顯示出傳遞給腳本的最後一個參數
[neau@mail ~]$ cat test1
#!/bin/bash
echo "Total of the arguments passed $#"
echo "The process Id is $$"
echo "Last argument is "$(eval echo \$$#)""
[neau@mail ~]$ ./test1 value bank test last
Total of the arguments passed 4
The process Id is 21545
Last argument is last
在上面的腳本中, eval命令首先把$$#解析爲當前shell的參數個數,而後在第二次掃描時得出最後一個參數。

4.給每一個值一個變量名
能夠給一個值一個變量名。下面我對此作些解釋,假定有一個名爲test2的文件:
[neau@mail ~]$ cat test2
CCTV 5
CHANGEL SPORTS
LIKE YES
你但願該文件中的第一列成爲變量名,第二列成爲該變量的值,這樣就能夠:
[neau@mail ~]$ cat test2
COMMANY TQ
LANGUE ENGLISH
LIKE YES
[neau@mail ~]$ cat test3
#!/bin/bash
while read NAME VALUE
do
eval "${NAME}=${VALUE}"
done
 

echo "$COMMANY $LANGUE $LIKE"
[neau@mail ~]$ ./test3
TQ ENGLISH YES
相關文章
相關標籤/搜索