eval
是shell內建
的命令。基本用法如下:
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...