自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Bash Shell 中單引號和雙引號的區(qū)別

系統(tǒng) Linux
本文將介紹不同類型的引號及其在 shell 腳本中的用法。

我們在 Linux 命令中經常會用到引號,比如處理文件名中的空格,或者處理特殊字符的時候。

本文將介紹不同類型的引號及其在 shell 腳本中的用法。

總結一下,大概有四種類型的引號:

  • 單引號:'
  • 雙引號:"
  • 反斜杠:\
  • 反引號:`

除了反斜杠以外,其余三個都是成對出現。下面我們來詳細看一下。

1.單引號

shell 會忽略單引號中所有的特殊字符,其中的所有內容都會被當作一個元素。

我們舉個例子,假如有一個文本文件,里面記錄了一些人名,如下:

$ cat cricket
Allan Donald, South Africa
Steve Waugh, Australia
Mark Waugh, Australia
Henry Olonga, Zimbabwe
Sachin Tendulkar, India

現在我們使用 grep 命令在其中搜索 "Waugh",會得到兩個結果:

$ grep Waugh cricket
Steve Waugh, Australia
Mark Waugh, Australia

但是如果我們更精確一點,搜索 Steve Waugh,就會出現錯誤:

$ grep Steve Waugh cricket
grep: Waugh: No such file or directory
cricket:Steve Waugh, Australia

為什么會這樣呢?因為空格在命令行中用于分割命令、選項和參數。在上面的例子中,我們原本是要搜索 Steve Waugh,但 shell 會將 Steve 作為 grep 的第一個參數,然后將 Waugh 和 cricket 作為被搜索的文件,很顯然,沒有 Waugh 這個文件,所以就報錯了。同時,輸出中顯示了文件 cricket 的結果。

如果我們使用單引號,來搜索 'Steve Waugh',它會被視為一個整體,那這樣就得到了我們期望的搜索結果:

$ grep 'Steve Waugh' cricket
Steve Waugh, Australia

基本上,當shell看到第一個單引號時,它會忽略任何特殊字符(空格也是一個特殊字符),直到找到另一個單引號(右引號)。

忽略所有特殊字符

如果用單引號引起來,所有特殊字符都會失去其原本的意義。下面我們舉幾個例子。

我們在shell中聲明一個變量,如果用$回顯變量名,它將顯示變量的值:

$ var=my_variable
$ echo $var
my_variable

但如果用單引號引起來,$ 將失去其特殊的功能。

$ echo '$var'
$var

另一個例子,回車鍵(回車字符)也放在單引號里面:

$ echo 'how are
you?'
how are
you?

2.雙引號

雙引號幾乎與單引號相似。這里之所以說“幾乎”是因為他們也會忽略所有特殊字符,除了:

  • 美元符號:$
  • 反引號:`
  • 反斜杠:\

由于美元符號 $ 不會被忽略,所以我們可以使用變量名,得到變量的值;但是單引號就不能這樣:

$ var=my_variable
$ echo " echo 'var

雙引號還可用于在shell中轉義單引號(即將其轉義為普通字符):

$ var=My 'own villa' is yellow
own villa: command not found
$ var="My 'own villa' is yellow"
$ echo $var
My 'own villa' is yellow

反過來用(用單引號轉義雙引號),也可以:

$ var=he said, "Awesome!"
said,: command not found
$ var='he said, "Awesome!"'
$ echo $var
he said, "Awesome!"

3.反斜杠

反斜杠用于轉義特殊字符。看下面的例子:

$ var=variable
$ echo \var
var
$ echo $var
variable
$ echo \$var
$vara

因為 v 沒有什么特別的含義,echo \var 只是簡單的打印了 var。另一方面,當使用 $var 的時候,反斜杠轉義了 $ 符號,所以打印出了 $var。

用反斜杠轉義換行符

我們可以使用反斜杠來轉義換行符,這樣就可以將單個命令換行繼續(xù)編寫。

當命令太長或是多個命令的組合時,你會看到一些網站使用反斜杠在多行中顯示單個命令。這可以使命令或代碼更具可讀性。

看下面的例子:

docker run --name server --network net -v html:/usr/share/nginx/html -v $PWD/custom-config.conf:/etc/nginx/nginx.conf -p 80:80 --restart on-failure -d nginx:latest

現在我們使用反斜杠,將上述命令分解為多行:

docker run --name server --network net \
-v html:/usr/share/nginx/html \
-v $PWD/custom-config.conf:/etc/nginx/nginx.conf \
-p 80:80 --restart on-failure -d nginx:latest

這樣看起來容易多了。

雙引號內的反斜杠

在雙引號內,/ (反斜杠)、$ (美元符號)以及 ` (反引號)是不被轉義的三個符號。

這樣的話,我們就可以使用反斜杠來轉義雙引號中的美元符號、雙引號以及反引號了。

看下面的例子,其中的 $5 會被認為是一個未聲明的變量,且沒有被賦值,所以在 echo 命令中會將其忽略:

$ echo "Meal costs $5.25"
Meal costs .25

要避免上述情況,可以使用 \ 來轉義 $

$ echo "Meal costs \$5.25"
Meal costs $5.25

4.反引號

反引號( ` )有一個特殊含義,用于命令替換。

Shell 具有此命令替換功能,其中指定的命令將替換為命令的輸出。

在下面的例子中,??date?? 會被替換為 date 命令的輸出信息,即系統(tǒng)的當前日期和時間而輸出:

$ echo The current date and time is ??date??
The current date and time is Monday 23 August 2021 04:55:18 PM IST

需要注意的一點是,只有當反引號之間是一個命令的時候,才會進行替換,否則,將會按原內容顯示:

$ echo 'The current date and time is ??late??'
The current date and time is ??late??

如前文所述,將反引號放在雙引號中,不會被轉義,但是放在單引號中,會被轉義為普通字符。

反引號不在建議使用

很長時間以來,反引號都用于 Shell 腳本中的命令替換,但是現在,現代 Unix 和 Linux 系統(tǒng)更提倡使用 $(command) 結構,比如:

$ echo The current date and time is $(date)
The current date and time is Monday 23 August 2021 05:55:47 PM IST

所以,反引號已經不再使用了。

以上就是本次分享全部內容,歡迎討論。

責任編輯:龐桂玉 來源: TIAP
相關推薦

2011-05-19 13:45:15

PHP單引號雙引號

2021-10-14 06:51:55

Shell 單引號雙引號

2010-07-13 11:25:42

Perl雙引號

2022-03-23 14:04:32

SQL字符串數據類型

2022-05-19 23:40:34

SQL語句引號

2019-08-23 09:17:11

Python腳本語言字符串

2011-05-19 14:00:51

PHP單引號雙引號

2010-07-02 10:33:18

SQL Server單

2009-12-25 15:59:25

shell編程

2011-03-07 15:49:13

2021-02-24 09:43:36

MySQL數據庫雙引號

2009-08-17 16:59:47

C#轉義字符雙引號

2015-04-16 10:15:45

PHPPHP執(zhí)行效率PHP技巧

2015-09-21 11:45:10

PHP編程效率要點

2024-11-11 11:51:07

2009-08-17 14:49:34

C#正則表達式雙引號

2021-02-01 10:42:47

MySQL雙引號數據庫

2017-05-22 08:35:07

MySQL雙引號錯位

2009-11-30 18:34:22

PHP簡單語法

2018-11-22 15:50:27

MySQL數據庫雙引號
點贊
收藏

51CTO技術棧公眾號