1. 程式人生 > >Linux 中 shell 中反引號與 $() 的對比

Linux 中 shell 中反引號與 $() 的對比

這兩者都是命令替換,命令替換是指:是Shell 執行命令並將命令替換部分替換為執行該命令後的結果。

比如:

[bob@centos home]$ val=hello
[bob@centos home]$ echo $(echo $val)
hello
[bob@centos home]$ echo `echo $val`
hello

或者:

[[email protected] home]$ echo $(date)
2017年 06月 25日 星期日 20:24:20 CST
[[email protected] home]$ echo `date`
2017年 06月 25日 星期日 20:24
:28 CST

區別:
反引號是 Bourne shell遺留下來的。
()POSIX()對命令的巢狀更清晰,更方便。
主要提倡使用$() 而不是 使用反引號有以下幾個原因:

(1)當你寫了這種命令使用反引號是會眼花的。而使用括號就清晰很多,巢狀也很方便。

libdir=$(dirname $(dirname $(which gcc)))/lib

libdir=`dirname \`dirname \\\`which gcc\\\`\``/lib

(2)還有一個原因對反斜槓的處理
只有兩個反斜槓時

[[email protected]
home]$ echo "`echo \\a`"; echo "$(echo \\a)" a \a

增加後

[[email protected] home]$ echo "`echo \\\a`"; echo "$(echo \\\a)"
\a
\a

在加一個

[[email protected] home]$ echo "`echo \\\\a`"; echo "$(echo \\\\a)"
\a
\\a

面對單引號中如此詭異的行為,我有點發虛。
在看看在括號中,將反斜槓當做轉義,都可以解釋清楚。

(3)反引號 巢狀使用需要反斜槓轉義

[bob@centos
home]$ echo $(echo $(date)) 20170625日 星期日 20:42:32 CST [bob@centos home]$ echo `echo `date`` date [bob@centos home]$ echo `echo \`date\`` 20170625日 星期日 20:42:42 CST [bob@centos home]$

綜上所述:$() 是被提倡使用的也是首選方法,它具有清晰的語法,提高人的可讀性,巢狀很直觀,內部解析分開的對反引號的解析也符合人們的常識。而反引號是不被推薦的,其容易偽裝的語法,而外觀極其像單引號,而不推薦被使用。

參考:

相關推薦

Linux shell 引號 $() 的對比

這兩者都是命令替換,命令替換是指:是Shell 執行命令並將命令替換部分替換為執行該命令後的結果。 比如: [bob@centos home]$ val=hello [bob@centos home]$ echo $(echo $val) hello [

linux bash shellfor的用法and示例

bash shell腳本中for的用法關於linux bash shell中的for語句 在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循環命令,今天就介紹一下關於for的一些用法。文中任何錯誤希望大佬們一一指出,不勝感激。bash sh

LinuxShellecho改變輸出顯示樣式

有趣 名稱 一個 contex 轉義字符 nbsp 日期 第一個 margin   echo -e "\033[32;49;1m [DONE] \033[39;49;0m"輸出結果 :[DONE]  文本終端的顏色可以使用“ANSI非常規字符序列”來生成。舉例:  echo

[轉] linuxshell使用上下鍵翻出歷史命名時出現^[[A^[[A^[[A^[[B^[[B的問題解決,Linux使用退格鍵時出現^H解決方法

XA TP brk 因此 上下 參數 csdn def 無法 [From] https://www.zmrbk.com/post-2030.html https://blog.csdn.net/suifengshiyu/article/details/40952771

Linuxshellexec解析

uil 當前 等等 不同的 exe inux 影響 區別 scrip exec和source都屬於bash內部命令(builtins commands),在bash下輸入man exec或man source可以查看所有的內部命令信息。 bash shell

Linuxshell輸入歷史命令

進行 ear 真的 ctrl lin hist home 效率 search 在Linux的shell中,經常輸入的命令有很多雷同,甚至是一樣的, 如果是長命令,再次敲一遍效率真的是很低, 不過可以通過Ctl+r, 查找history中以前輸入的命令,很是好用.

linuxshellif的“-e,-d,-f”的用法

符號鏈接 符號 字符串變量 -s 長度 目錄 != filename bsp 文件表達式-e filename 如果 filename存在,則為真-d filename 如果 filename為目錄,則為真 -f filename 如果 filename為常規文件,則為真-

Linux基礎------Shell的迴圈

      Linux基礎------Shell中的迴圈   Linux shell程式設計中也存在著迴圈。迴圈分為兩種:一種是固定迴圈,另一種是不定迴圈。所謂固定迴圈和不定迴圈的定義是指在迴圈之前有沒有定義好迴圈的次

linux系統shell重定向 標準輸出 錯誤輸出 >/dev/null 2>&1

經常shell指令碼中,會看到: 仔細體會下面例子。 >/dev/null  2>&1 這句話的意思簡單理解為:標準輸出和錯誤輸出都不會輸出出來。 [email protected]:/tmp>date>1.txt >/de

linux shell if 條件判斷 -a 到 -z 的意思

[ -a FILE ] 如果 FILE 存在則為真。 [ -b FILE ] 如果 FILE 存在且是一個塊特殊檔案則為真。 [ -c FILE ] 如果 FILE 存在且是一個字特殊檔案則為真。 [ -d FILE ] 如果 FILE 存在且是一個目錄則為真。 [ -e FILE ] 如果 FIL

linuxshellif的“-e,-d,-f”是什麼意思

檔案表示式 -e filename 如果 filename存在,則為真 -d filename 如果 filename為目錄,則為真  -f filename 如果 filename為常規檔案,則為真 -L filename 如果 filename為符號連結,則為真 -r

linuxshell(())雙括號運算子的使用詳解

在剛開始學習inux shell指令碼程式設計時候,對於它的 四則運算以及邏輯運算。估計很多朋友都感覺比較難以接受。特變邏輯運算子”[]”使用時候,必須保證運算子與算數 之間有空格。 四則運算也只能藉助:let,expr等命令完成。 今天講的雙括號”(())”結構語句,

Linux bash shell變數的設定和使用

給變數賦值直接使用符號=,如name=kylin 使用這個變數時需要在前邊加上$符號,如echo $name, 另外,如果變數中的內容比較複雜,使用大括號是比較安全的辦法,如${name}, 如果變數所賦值中需要有空格則要加上雙引號或者單引號。 雙引號和單引號的區別在於,雙

linuxshell日期格式化(時間格式化)

#man date可以看到date的help檔案 #date 獲取當前時間 #date -d "-1 week" +%Y%m%d 獲取上週日期(day,month,year,hour) #date --date="-24 hour" +%Y%m%d 同上 date_now=`date +%s` shell腳

linuxshell獲取時間

獲得當天的日期 date +%Y-%m-%d 輸出: 2011-07-28 將當前日期賦值給DATE變數 DATE=$(date +%Y%m%d) 有時候我們需要使用今天之前或者往後的日期,這時可以使用date的 -d引數 獲取明天的日期 date -d next-day

linuxshell的set命令

用set命令可以設定各種shell選項或者列出shell變數.單個選項設定常用的特性.在某些選項之後-o引數將特殊特性開啟.在某些選項之後使用+o引數將關閉某些特性,不帶任何引數的set命令將顯示shell的全部變數.除非遇到非法的選項,否則set總是返回ture. 當s

linuxshell獲取時間 date巧用

獲得當天的日期 date +%Y-%m-%d 輸出: 2011-07-28 date1=$(date --date='1 days ago +%Y%m%d')    #前一天的日期 date1=$(date --date='2 days ago +%Y%m%d')   

shell引號(`)$()的作用區別

linux下的反引號(`)和$()執行的是命令替換的功能。 1、將命令的執行結果賦給一個變數 反引號: DATE=`date` //變數=`命令` echo $DATE 執行結果為: [[email protected] Signal_shell]

Linux Shell 引號,單引號,…

    反引號位 (`) 位於鍵盤的Tab鍵的上方、1鍵的左方。注意與單引號(')位於Enter鍵的左方的區別。   在Linux中起著命令替換的作用。命令替換是指shell能夠將一個命令的標準輸出插在一個命令列中任何位置。   如下:    shell會執行反引號中的date命令,把結果插入到echo

shell引號、雙引號斜杠簡說

能夠 col 都是 嵌套 修改文件 字符 變量名 令行 文件中 需求:ssh遠程修改文件,變量從文件中獲取,插入遠程服務器的文件裏 shell腳本中的單引號和雙引號一樣都是字符串的界定符,而不是字符的界定符。單引號用於保持引號內所有字符的字面值,即使引號內的\和回車也不