命令中的特殊字元

2021-09-06 12:58:55 字數 4419 閱讀 3216

1、雙引號

雙引號「」通常用來表示引用乙個字串,有時能遮蔽一些標點等特殊符號。在命令中使用雙引號時,一般表示引用的部分是乙個不可分割的整體。

通常可以理解為所有放入雙引號中的內容都按照字串來處理,除非有另乙個引用號告知某個特殊字串具有特殊含義(例如變數等)。

(1)遮蔽特殊字元

[root@localhost ~]# echo tom jim kate jack

tom jim kate jack

[root@localhost ~]# echo tom jim kate jack; mary roman

tom jim kate jack

bash: mary: command not found

上面這個示例中包含了特殊字元「;」(分號表示乙個命令的結束、另乙個命令的開始),因此引起了系統的誤解。像這種情況一般應該使用雙引號表示字串的引用:

[root@localhost ~]# echo "

tom jim kate jack; mary roman

"tom jim kate jack; mary roman

(2)在雙引號中使用其他引用符

如果在雙引號引用的字串中引用,應該使用其他引用符號。例如使用「$」引用變數:

[root@localhost ~]# name="

mary

"[root@localhost ~]# echo "

tom jim kate jack; mary roman $name

"tom jim kate jack; mary roman mary

除了變數引用符之外,還可以使用命令輸出引用符反引號(倒引號):

[root@localhost ~]# echo "

now time:`date`

"now time:fri dec

608:09:33 cst 2013

(3)在命令中使用雙引號

在一些命令中還經常使用雙引號避免shell誤解選項的含義等。例如:

[root@localhost ~]# name="

tom jim kate jack; mary roman mary

"[root@localhost ~]# echo $name |grep tom jim

grep: jim: no such file or directory

bash: echo: write error: broken pipe

[root@localhost ~]# echo $name | grep "

tom jim

"tom jim kate jack; mary roman mary

2、單引號

單引號『』的使用方法和作用與雙引號基本上一致(但有區別,見3),都是將引號中的內容都當作字串來處理。另外,單引號通常在一些特殊命令中與雙引號配合,表示引用中的引用(shell中不允許一條命令中的兩個引用號都使用雙引號或單引號)。

(1)使用上面的示例:

[root@localhost ~]# echo $name | grep '

tom jim

'tom jim kate jack; mary roman mary

(2)需要巢狀使用雙引號時,但是shell不允許,此時使用的方法是:雙引號內用單引號

[root@localhost ~]# awk '

begin

'20131206-08:26:05

3、雙引號與單引號的區別

(1)雙引號具有變數置換的功能,而單引號不具有變數置換的功能:

[root@localhost ~]# name="

tom"

[root@localhost ~]# echo "

your name is:$name

"your name

is:tom

[root@localhost ~]# echo '

your name is:$name

'your name

is:$name

(2)雙引號具有命令置換的功能,而單引號不具有命令置換的功能:

[root@localhost ~]# echo '

now time:`date`

'now time:`date`

[root@localhost ~]# echo "

now time:`date`

"now time:fri dec

608:48:58 cst 2013

總之,單引號內的內容會原原本本的保持(也可以說單引號可以遮蔽其內的所有特殊字元),而雙引號內的內容會由於變數引用$或命令引用``而變化。

反引號``有時也稱為倒引號,這個鍵通常位於鍵盤的tab鍵上方、數字鍵1的左邊。反引號主要用來引用一些函式、命令輸出等,執行時系統會嘗試將反引號中的內容當作乙個命令去執行。

(1)命令中的命令

[root@localhost ~]# ls -l `cat /etc/shells`

-rwxr-xr-x 1 root root 716972 jul 12

2006 /bin/bash

lrwxrwxrwx

1 root root 4 nov 12

23:57 /bin/csh ->tcsh

-rwxr-xr-x 1 root root 1169832 jan 16

2007 /bin/ksh

lrwxrwxrwx

1 root root 4 nov 12

23:52 /bin/sh ->bash

-rwxr-xr-x 1 root root 343756 oct 31

2006 /bin/tcsh

-rwxr-xr-x 1 root root 3236 jun 25

2007 /sbin/nologin

[root@localhost ~]# ls -l $(cat /etc/shells)

-rwxr-xr-x 1 root root 716972 jul 12

2006 /bin/bash

lrwxrwxrwx

1 root root 4 nov 12

23:57 /bin/csh ->tcsh

-rwxr-xr-x 1 root root 1169832 jan 16

2007 /bin/ksh

lrwxrwxrwx

1 root root 4 nov 12

23:52 /bin/sh ->bash

-rwxr-xr-x 1 root root 343756 oct 31

2006 /bin/tcsh

-rwxr-xr-x 1 root root 3236 jun 25

2007 /sbin/nologin

(2)在字串中巢狀和使用乙個命令的情況:

[root@localhost ~]# echo "

now time:`date +'%t'`

"now time:

08:35:44

[root@localhost ~]# echo "

now time:$(date +'%t')

"now time:

08:55:35

[root@localhost ~]# date=`date`

[root@localhost ~]# echo "

host time is:$date

"host time

is:fri dec 6

09:03:15 cst 2013

許多時候需要在輸出中使用這些特殊字元本身,這時應該使用反斜槓遮蔽其特殊的含義。

(1)例如要使用美元符號表示貨幣:

[root@localhost ~]# echo "

please pay \$15.50.

"please pay $

15.50.

其實也可以使用單引號『』實現上述目的:

[root@localhost ~]# echo '

please pay $15.50.

'please pay $

15.50.

你要是在上面的$前加入反斜槓,連反斜槓的功能都被單引號『』遮蔽掉了,反斜槓也會原原本本的輸出:

[root@localhost ~]# echo '

please pay \$15.50.

'please pay \$

15.50.

命令中的特殊字元

小知識 表示乙個命令的結束 另乙個命令的開始 在windows中通常將一些正規表示式的基本字元稱為萬用字元,而在linux作業系統中人們則將這些基本字元稱為元字元。使用多個元字元組成的查詢表示式稱為匹配模式,使用匹配模式查詢的過程稱為 模式 匹配 字串引用符雙引號和單引號 雙引號和單引號的主要作用是...

Shell命令特殊字元

shell命令特殊字元 注釋 後台執行 把執行結果輸入到乙個指定的檔案中 把執行結果附加到乙個以存在的檔案後面 表示當前目錄 表示上一級目錄 最後一次執行的命令的返回碼 shell程序自己的pid shell程序最近啟動的後台程序的pid 命令列引數的個數 0 指令碼檔案本身的名字 1 2 第乙個,...

Shell命令特殊字元

shell命令特殊字元 注釋,以後臺方式執行。如 find name linux 取代命令字元。可用它將多個命令分隔開來,讓命令依次執行。重定向,把執行結果輸入到乙個檔案中。若該檔案已經存在,則原有內容會被充掉。如ls l aa.txt 把招待結果附加到乙個已存在的檔案後面。建立管線,將乙個命令的執...