1. 程式人生 > >[shell 指令碼]eval命令和命令代換 ` `和 $()

[shell 指令碼]eval命令和命令代換 ` `和 $()

作用

$(cmd)和`cmd`的作用相同,在執行一條命令時,會將其中的``或者是$()中的語句命令執行一遍,再將結果加入到原命令。
echo `pwd`
echo $(pwd)
shell 執行該命令列,先執行命令pwd,將輸出結果替代`pwd`,最後輸出替換後的結果。

eg:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

兩者對比

  • 相對而言,$()用起來較簡潔點,倒引號較容易混淆。
  • 多層次的替換中,倒引號需要/處理,需要這樣寫cmd/`cmd/“,寫起來麻煩,看起來也不那麼簡潔。用(),(cmd$(cmd))相對簡單點。
  • 倒引號基本在shell中使用,移植性較高,$()不是。

    eval

    用法:eval cmdline
    原理:eval 主要用在對引數的特殊處理上,一般的命令列,shell對引數只執行一遍。eval會對後面的cmdline進行兩邊掃描,如果第一遍掃描,cmdline只是個普通命令,就直接執行命令。若cmdline的變數又間接引用,則掃描第二遍,執行間接引用的語義。

    這裡寫圖片描述
    當直接用echo $cmd時,只進行一次掃描,所以時echo hello wrold。當eval $cmd時,cmd裡有間接引用,進行二次掃描,所以時hello world