1. 程式人生 > >shell中反引號和$()的區別以及eval命令

shell中反引號和$()的區別以及eval命令

反引號和$()的區別
反引號和$()都是shell指令碼中用來進行命令代換的命令,命令代換就是執行一個命令將其結果交給一個變數。

echo ‘echo \\ ’ //反引號
echo $(echo \\ )

這裡寫圖片描述

我們再把指令碼改成8個\
這裡寫圖片描述

總結:
1、反引號本身對\做了解釋,保留了本身的意思。如果我們想在反引號中起到\的特殊意義,用兩個\來表示
2、()\使\()是比較新的用法,如果要使用的話就優先使用$()。

eval命令
eval命令的作用是再次執行命令列處理,也就是對一個命令列執行兩次命令列的處理(執行兩次命令列處理不是執行兩次命令

)。eval後面跟一個命令,eval會對後面的命令進行兩次掃描,如果第一次掃描發現這個命令是個普通的命令就會執行這個命令,如果後面的命令是含有變數的簡潔引用,就保證間接引用的語義。

1、eval命令先掃描命令列做一個置換,然後再執行該命令。這個命令適用於那些無法掃描一次就實現其功能的變數,這個命令會對變數進行兩次掃描,這就是複雜命令。不過eval命令也適用於簡單的命令時是對其的回顯。
2、eval也可以用於回顯簡單變數,不一定時複雜變數
這裡寫圖片描述
3、兩次掃描,我們首先建立一個名為test的小檔案,在這個小檔案中含有一些文字。接著,將cat test賦給變數myfile,現在我們e cho該變數,看看是否能夠執行上述命令。
這裡寫圖片描述

4、獲得最後一個引數

echo “Last argument is (evalecho$#)”
echo “Last argument is (evalecho#)”