bash中 命令 和反引號的區別

2021-06-27 07:27:46 字數 1040 閱讀 5397

bash 指令碼命令的程式設計過程中,經常用到反引號```,也經常用到`$(命令)`,一般我們的常見用法如下:

反引號內容替換

```bash

bin=`dirname $0`

bin=`cd $bin;pwd`

```會將反引號裡面的內容解釋為命令列,開啟子shell,然後去執行命令,然後將輸出結果替換反引號以及其中的命令。

$(命令)

可以分解為兩個部分,乙個是$符號,另外乙個是()小括號

$符的作用是變數替換,即用變數的值去替換當前的內容

小括號則是開乙個子shell優先去執行小括號內部的命令

從前面的描述可以看出,他們都可以用作內容替換,但是他們還是有細微差別。

在$(命令)中,命令部分的內容不會被父shell解析,而反引號的部分卻會被解析,例如`\`,`$`,```

舉個例子

> $(echo "first second"|awk "\$2==\"second\" ") 執行是成功的,執行結果為first 而

> a=`echo "first second"|awk "\$2==\"second\" "`執行失敗

> awk: line 1: syntax error at or near ==

原因是反引號內的內容會被父shell解釋,所以\$2被父shell解釋後變成了$2, 而$2在子shell裡面是會被解析的,而預設的

$2代表子shell的第二個引數,顯然為空,然後繼續被awk解釋,然後就報了上述的錯誤

其實還有另外乙個錯誤,print $1,這裡的$符號也是要被父shell解釋的,則是不對的

最後改為

> `echo "first second"|awk "\\$2==\"second\" `

正確這兩個命令在使用的時候都會開子shell, 如果使用echo $$;(echo $$)去看的話,發現都是相同的,後面找了下資料發現,

子shell的環境變數是父shell的乙個副本,因此$$估計也被copy過來了。

Shell命令中單引號,雙引號,反引號的區別

在linux系統下呼叫shell命令時經常會忽略雙引號和單引號的區別,一般情況下都不會出錯。但是當遇到一些特殊符號時,會出現預想不到的情況。比如我會經常使用echo e password npassword passwd root 這條命令修改root密碼時出現了異常情況,由於密碼是隨機生成的,有一...

Bash指令碼中括號和反引號的使用

在bash指令碼中,我們經常需要引用變數或者命令的執行結果來作為檔案的名字或者日誌的輸出,在指令碼或者shell中我們可以使用反引號 或者括號 來獲取到變數的內容 示例 1 獲取日期的輸出 echo date output 2021年 01月 05日 星期二 15 21 23 cstecho dat...

Linux中單引號,雙引號和反引號的區別

單引號就是將其中的內容當作單純的字串,對其中的變數和命令不做處理 you lily echo this is just a test,can you tell your name?this is just a test,can you tell your name?在這個字串當中,不會將 you替換...