天天看點

eval

本文将會講解一些linux中指令的使用與技巧希望對新手給予幫助

一 e v a l指令将會首先掃描指令行進行所有的置換,然後再執行該指令。該指令适用于那些一次掃描無法實作其功能的變量。該指令對變量進行兩次掃描。這些需要進行兩次掃描的變量有時被稱為複雜變量。不過這些變量本身并不複雜。e v a l指令也可以用于回顯簡單變量,不一定是複雜變量。

1 eval指令也可以用于回顯簡單變量,不一定是複雜變量

例如:

[neau@mail ~]$ NAME=VALUEBANK

[neau@mail ~]$ eval echo $NAME

VALUEBANK

[neau@mail ~]$ echo $NAME

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"

如果我們e c h o該變量,我們将無法列出t e s t 檔案中的内容。

[neau@mail ~]$ echo $myfile

cat test

讓我們來試一下e v a l指令,記住e v a l指令将會對該變量進行兩次掃瞄。

[neau@mail ~]$ eval $myfile

從上面的結果可以看出,使用e v a l指令不但可以置換該變量,還能夠執行相應的指令。第

一次掃描進行了變量置換,第二次掃描執行了該字元串中所包含的指令cat test。

3指令還可以用來顯示出傳遞給腳本的最後一個參數

[neau@mail ~]$ cat test1

#!/bin/bash

echo "Total of the arguments passed $#"

echo "The process Id is $$"

echo "Last argument os "$(eval echo \$$#)""

[neau@mail ~]$ ./test1 value bank test last

Total of the arguments passed 4

The process Id is 21545

Last argument os last

在上面的腳本中, e v a l指令首先把$ $ #解析為目前s h e l l的參數個數,然後在第二次掃描時

得出最後一個參數。

4給每個值一個變量名

可以給一個值一個變量名。下面我對此做些解釋,假定有一個名為test2的檔案:

[neau@mail ~]$ cat test2

CCTV 5

CHANGEL SPORTS

LIKE YES

你希望該檔案中的第一列成為變量名,第二列成為該變量的值,這樣就可以:

COMMANY TQ

LANGUE ENGLISH

[neau@mail ~]$ cat test3

while read NAME VALUE

do

eval "${NAME}=${VALUE}"

done <test2

echo "$COMMANY $LANGUE $LIKE"

[neau@mail ~]$ ./test3

TQ ENGLISH YES