Shell中, eval的用法

2021-07-28 20:47:51 字數 3009 閱讀 8215

evalshell內建的命令。基本用法如下:

eval [arguments]
主要功能是讀入arguments並執行之。arguments退出碼(exit code)會被當做eval退出碼。如果沒有arguments,則退出碼0

在平時的使用中,我們一般會用到eval的2個特性。

cat >parse_twice.sh<""

#!/bin/bash

x=100

y=xeval

echo \$$y

eval

$y=50

echo

$xeval

echo \$$y

eofchmod a+x parse_twice.sh

./parse_twice.sh

# 輸出

10050

50

上面例子中的eval echo \$$y首先被讀取,然後被執行:在讀取的過程中,$y會被替換成x,所以讀取的結果是echo $x;執行echo $x的輸出就是列印了變數x的值。同理,eval $y=50會被解析成x=50,然後執行x=50的結果就是為變數x賦值。

cat >complex_command.sh<""

#!/bin/bash

dirpath=/users/lishaolin/workspace/shell/eval

******_cmd="ls -l $dirpath"

complex_cmd="ls -l $dirpath | awk -f ' ' ''"

echo

'*************************='

echo

'*****===****** cmd*****===='

echo

'*************************='

eval

$******_cmd

echo

'-----------------------------------'

$******_cmd

echo

'*************************=='

echo

'*****===complex cmd*****===='

echo

'*************************=='

eval

$complex_cmd

echo

'-----------------------------------'

$complex_cmd

eofchmod a+x complex_command.sh

./complex_command.sh

# 輸出

*************************=

*****===****** cmd*****====

*************************=

total 16

-rwxr-xr-x 1 lishaolin staff 497317

16:30 complex_command.sh

-rwxr-xr-x 1 lishaolin staff 71317

15:41 parse_twice.sh

-----------------------------------

total 16

-rwxr-xr-x 1 lishaolin staff 497317

16:30 complex_command.sh

-rwxr-xr-x 1 lishaolin staff 71317

15:41 parse_twice.sh

*************************==

*****===complex cmd*****====

*************************==

complex_command.sh

parse_twice.sh

-----------------------------------

ls: $9}': no such file or directory

ls: ': no such file or directory

ls: ': no such file or directory

ls: '{print: no such file or directory

ls: -f: no such file or directory

ls: awk: no such file or directory

ls: |: no such file or directory

/users/lishaolin/workspace/shell/eval:

total 16

-rwxr-xr-x 1 lishaolin staff 497317

16:30 complex_command.sh

-rwxr-xr-x 1 lishaolin staff 71317

15:41 parse_twice.sh

可以看到,在執行$******_cmd時,是否使用eval的效果是相同的。但是當我們執行乙個稍微複雜一點(比如包含管道(pipe))的字串形式的命令時,如果不使用eval,執行會報錯!

Shell 中eval的用法

eval command line 其中command line是在終端上鍵入的一條普通命令列。然而當在它前面放上eval時,其結果是shell在執行命令列之前掃瞄它兩次。如 pipe eval ls pipe wc lshell第1次掃瞄命令行時,它替換出pipe的值 接著eval使它再次掃瞄命令...

shell 中的 eval 應用

一 bash命令處理的12個步驟 1 將命令列分成由固定元字符集分隔的記號 space,tab,newline,記號型別包括單詞,關鍵字,i o重定向符和分號。2 檢測每個命令的第乙個記號,檢視是否為不帶引號或反斜線的關鍵字。如果是乙個開放的關鍵字,如if和其他控制結構起始字串,function,變...

python中eval的用法

eval 用於執行乙個字串的表示式,並返回表示式的值 eval expression,globals none,locals none 官方文件中的解釋是,將字串str當成有效的表示式來求值並返回計算結果。globals和locals引數是可選的,如果提供了globals引數,那麼它必須是dicti...