shell指令碼的命令代換

2021-08-03 19:06:08 字數 1684 閱讀 7179

一、命令代換

命令代換是指先完成引號或者括號中的命令列,然後將其結果替換出來,在重新組成新的命令列。shell指令碼中用於命令列代換的一反引號(` `),和$()。那麼這兩個又有什麼不同呢?

執行後:

表面上看起來兩個結果並沒有什麼不同,但仔細分析會發現有以下不同點。

反引號(` `)的缺點

(a)它非常容易和單引號混淆

(b)它會對\進行跳脫處理,而$()不會

如下:

這裡我們可以看出,shell裡的單引號會保持所有自負的字面值,所以引號裡的執行結果應該是\。但用反引號輸出的結果是\,說明是由於它對\進行了跳脫處理。

一般情況下建議使用$(),這樣比較清楚直觀

$()的缺點是:

並不是所有的類unix系統都支援這種形式,但反引號是支援的,也就是說移植性不如反引號。

算術代換:$(())

用於算術計算,$(())中的shell變數取值將轉換成整數

執行結果:

二、eval命令

功能說明:告知shell取出eval的引數,重新運算求出引數的內容。

補充說明:eval可讀取一連串的引數,然後再依照引數本身的特性來執行。

eval執行命令行前掃瞄兩次,再次運算求出引數內容,eval是對bash shell命令列處理規則的靈活應用,進而構造「智慧型」命令實現複雜功能。

1.eval命令也可以用於回顯簡單變數,不一定是複雜變數。

2.執行含有字串的命令

首先建立乙個名為test的檔案,在這個檔案中輸入如下文字;

接著將test賦給變數myfile;

此時echo該變數,發現無法列出test檔案中的內容;

呼叫eval命令,發現可以顯示test文字中的內容。

從上面的結果可以看出,使用eval命令不但可以置換該變數,還能夠執行相應的命令。第一次掃瞄進行了變數置換,第二次掃瞄執行了該字串中所包含的命令cat test。

3.用來顯示出傳遞給指令碼的最後乙個引數

在上面的指令碼中,eval命令首先$$#解析為當前shell的引數個數,第二次掃瞄時得到最後乙個引數。

執行後

shell指令碼之命令代換

理解 和 反引號在 shel l指令碼中 有獨特的 作用,凡 是被反引 號包括的 內容sh ell會 先執行該 命令,再 將該命令 的輸出結 果代換到 當前命令 行中。所 以反引號 的作用是 命令替換 則是算數代換,在shell指令碼中,被雙括號括起來的算數命令可以被替換成算術結果。中只能用 運算子...

shell指令碼 命令代換

什麼是命令代換 命令代換簡單來說就是在shell內部巢狀多條命令,一次執行得到結果 shell的命令代換有兩種方式可以實現 來看例子 既然這兩種方式都可以進行命令代換,那麼它們有什麼區別呢?支援命令巢狀使用,而反引號是不行的 這條命令雖然沒有什麼意義,但是很好的說明了 是支援巢狀使用的 反引號比較陳...

shell指令碼 find命令

find命令用於查詢,功能很強大,格式如下 find pathname options print exec ok pathname find命令所查詢的目錄路徑。例如用.來表示當前目錄,用 來表示系統根目錄。print find命令將匹配的檔案輸出到標準輸出。exec find命令對匹配的檔案執行...