『忘了再學』Shell基礎 — 9、Bash中的特殊符號(一)

繁華似錦Fighting發表於2022-04-11

1、雙單引號

'':單引號。在單引號中所有的特殊符號,如$"`"(反引號)都沒有特殊含義。

2、雙引號

"":雙引號。在雙引號中特殊符號都沒有特殊含義,但是$"`"(反引號)和\除外,這三個符號是有特殊含義的,擁有“呼叫變數的值”、“引用命令”和“轉義符"的特殊含義。

單引號和雙引號的區別,舉例如下:

# 1.定義變數name的值是sc
[root@localhost ~]# name=sc

# 2.如果輸出時使用單引號,則$name原封不動的輸出
[root@localhost ~]# echo '$name'
$name

# 3.如果輸出時使用雙引號,則會輸出變數name的值sc
[root@localhost ~]# echo "$name"
sc

# 4.反引號括起來的命令會正常執行
[root@localhost ~]# echo `date`
2020年 6月 21 日星期一 18:16:33 CST

# 5.但是如果反引號命令被單引號括起來,那麼這個命令不會執行,
# `date`會被當成普通字元輸出
[root@localhost ~]# echo '`date`'
`date`

# 如果是雙引號括起來,那麼這個命令又會正常執行
[root@localhost ~]# echo "`date`"
2020年 6月 21 日星期一 18:18:18 CST

3、$符號

$:用於呼叫變數的值,如需要呼叫變數name的值時,需要用$name的方式得到變數的值。

在Linux系統中,定義一個變數非常簡單,直接用變數名=變數值的格式定義變數就可以了。而我們在檢視變數值的時候,使用$變數名就可以檢視到。

如下,用echo命令檢視變數name的值,如果我們不加$echo命令會認為要輸出name字串,如果在name前加上$符號,echo命令就會輸出變數name的值。

# 定義name變數
[root@localhost ~]# name=sc

[root@localhost ~]# echo name
name
[root@localhost ~]# echo $name
sc

4、反引號

"``":反引號。反引號括起來的內容是系統命令,在Bash中會先執行它。和$()
作用一樣,不過推薦使用$(),因為反引號非常容易看錯。

5、$()符號

$():和反引號作用一樣,用來引用系統命令。

如果我們直接從命令列中執行一個系統命令(如date命令),這個時候命令是不用$()符號括起來的,因為Shell是可以直接呼叫系統命令的。

那什麼時候需要把系統命令括起來呢?
如定義一個變數a,需要把date命令的結果,賦值給a的時候,如a=date。這個時候就需要讓date命令先執行,再把所得到的值賦值給變數a

如下示例:

[root@localhost ~]# a=date
[root@localhost ~]# echo $a
date

[root@localhost ~]# a=`date`
[root@localhost ~]# echo $a
2020年 6月 22日 星期一 18:18:18 CST

上面示例中可以看到,如果date命令不加反引號,Shell會認為把date字串賦值給a變數。

總結:也就是說,只有需要把命令的結果賦值於變數的時候,才需要用反引號或者$()符號把命令括起來。任何命令的結果都可以賦值給變數,只要命令的結果有輸出,像cd命令就不可以。

推薦使用$()代替反引號。

  • 練習:把root目錄下所有檔案的檔名存入變數b中。
    [root@localhost ~]# b=$(ls /root)
    [root@localhost ~]# echo $b
    anaconda-ks.cfg  install.log  install.log.syslog
    
  • 綜合練習:
    # 如果命令不用反引號包含,命令不會執行,而是直接輸出
    [root@localhost ~]# echo ls
    ls
    
    # 只有用反引號包括命令,這個命令才會執行
    [root@localhost ~]# echo `ls`
    anaconda-ks.cfg  install.log  install.log.syslog
    
    # 使用$(命令)的方式也是可以的
    [root@localhost ~]# echo $(date)
    2020年 6月 22日 星期一 18:18:18 CST
    

6、#符號

#:在Shell指令碼中,#開頭的行代表註釋。

7、\符號

\:轉義符,跟在\之後的特殊符號將失去特殊含義,變為普通字元。如\$name將輸出$name符號,而不當做是變數引用。

相關文章