Bash?Shell中單引號(hào)和雙引號(hào)的區(qū)別小結(jié)
在Bash Shell中,單引號(hào)('
)和雙引號(hào)("
)都用于定義字符串,但它們之間有一些重要的區(qū)別。這些區(qū)別影響字符串的解釋方式,變量的擴(kuò)展,以及特殊字符的處理。
單引號(hào)
字面值:在單引號(hào)中的所有字符都會(huì)被視為字面值,即它們的特殊含義不會(huì)被解釋。例如,$
用于變量擴(kuò)展,但在單引號(hào)中它只會(huì)被視為普通的美元符號(hào)。
echo '$HOME'
上面的命令將輸出$HOME
,而不是展開(kāi)為環(huán)境變量HOME
的值。
不允許嵌套單引號(hào):?jiǎn)我?hào)內(nèi)不能包含其他單引號(hào),即使它們被轉(zhuǎn)義。要在單引號(hào)字符串中包含單引號(hào),你需要使用一種特殊的語(yǔ)法:
echo 'It'\''s a test'
這將輸出It's a test
。
單引號(hào) ('
) 用于保留字符的字面含義,特殊字符在單引號(hào)里面,都會(huì)變?yōu)槠胀ㄗ址?,例?nbsp;*
、$
、反斜杠 (\
) 等。
(base) yongqiang@yongqiang:~/bash_work$ ls -l total 0 -rwxr-xr-x 1 yongqiang yongqiang 231 May 13 23:24 bash_script.sh -rw-r--r-- 1 yongqiang yongqiang 0 May 15 09:31 yongqiang.txt (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo * bash_script.sh yongqiang.txt (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo '*' * (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "*" * (base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo $ $ (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo '$' $ (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "$" $ (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo $PATH /home/yongqiang/bin:/home/yongqiang/miniconda3/bin:/home/yongqiang/miniconda3/condabin:......:/home/yongqiang/software/platform-tools/ (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo '$PATH' $PATH (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo $PATH /home/yongqiang/bin:/home/yongqiang/miniconda3/bin:/home/yongqiang/miniconda3/condabin:......:/home/yongqiang/software/platform-tools/ (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo $USER yongqiang (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo '$USER' $USER (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "$USER" yongqiang (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo $((5 + 1)) 6 (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo '$((5 + 1))' $((5 + 1)) (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "$((5 + 1))" 6 (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo $(echo $USER) yongqiang (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo '$(echo $USER)' $(echo $USER) (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "$(echo $USER)" yongqiang (base) yongqiang@yongqiang:~/bash_work$
反斜杠在單引號(hào)中變成了普通字符。如果在單引號(hào)之中,還要使用單引號(hào),不能使用轉(zhuǎn)義,需要在外層的單引號(hào)前面加上一個(gè)($
),然后再對(duì)里層的單引號(hào)轉(zhuǎn)義。
(base) yongqiang@yongqiang:~/bash_work$ echo '\' \ (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo 'It's me!' bash: !': event not found (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo 'It\'s me!' bash: !': event not found (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo $'It\'s me!' It's me! (base) yongqiang@yongqiang:~/bash_work$
在雙引號(hào)之中使用單引號(hào)。
(base) yongqiang@yongqiang:~/bash_work$ echo "It's me!" It's me! (base) yongqiang@yongqiang:~/bash_work$
雙引號(hào)
變量擴(kuò)展:雙引號(hào)中的變量會(huì)被擴(kuò)展,即$var
會(huì)被替換為變量var
的值。
name="John" echo "Hello, $name"
上面的命令將輸出Hello, John
。
特殊字符解釋:雙引號(hào)中的特殊字符,如\n
(換行)和\t
(制表符),會(huì)被解釋。
echo "Line 1\nLine 2"
這將輸出兩行文本,而不是一行。
感嘆號(hào)問(wèn)題:雙引號(hào)中的感嘆號(hào)!
可能會(huì)引起歷史擴(kuò)展問(wèn)題,這需要特別注意。
雙引號(hào) ("
) 比單引號(hào) ('
) 寬松。在雙引號(hào)中,反引號(hào) (`
)、$
、反斜杠 (\
) 三個(gè)特殊字符會(huì)被 Bash 自動(dòng)擴(kuò)展。$
符號(hào)用于引用變量,反引號(hào) (`
) 用于執(zhí)行子命令。反斜杠 (\
) 在雙引號(hào)之中用來(lái)轉(zhuǎn)義。
(base) yongqiang@yongqiang:~/bash_work$ echo ? ? (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo '?' ? (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "?" ? (base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo $SHELL /bin/bash (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo '$SHELL' $SHELL (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "$SHELL" /bin/bash (base) yongqiang@yongqiang:~/bash_work$
使用反斜杠,在雙引號(hào)之中插入雙引號(hào),或者插入反斜杠本身。
(base) yongqiang@yongqiang:~/bash_work$ echo '\\' \\ (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "\\" \ (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo ""yongqiang"" yongqiang (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "\"yongqiang\"" "yongqiang" (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "It's me!" It's me! (base) yongqiang@yongqiang:~/bash_work$
Bash 正常情況下會(huì)將換行符解釋為命令結(jié)束,但是換行符在雙引號(hào)之中就失去了這種特殊作用,只用來(lái)?yè)Q行??梢暂斎攵嘈?,echo
命令會(huì)將換行符原樣輸出,顯示的時(shí)候正常解釋為換行。
(base) yongqiang@yongqiang:~/bash_work$ echo "yong > qiang" yong qiang (base) yongqiang@yongqiang:~/bash_work$
如果文件名中包含空格,需要使用雙引號(hào)或單引號(hào),將文件名放在里面。
(base) yongqiang@yongqiang:~/bash_work$ ls -l total 0 -rwxr-xr-x 1 yongqiang yongqiang 106 May 13 20:11 bash_script.sh (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ touch "yong qiang.txt" (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ ls -l total 0 -rwxr-xr-x 1 yongqiang yongqiang 106 May 13 20:11 bash_script.sh -rw-r--r-- 1 yongqiang yongqiang 0 May 13 21:27 'yong qiang.txt' (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ ls -l "yong qiang.txt" -rw-r--r-- 1 yongqiang yongqiang 0 May 13 21:27 'yong qiang.txt' (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ ls -l 'yong qiang.txt' -rw-r--r-- 1 yongqiang yongqiang 0 May 13 21:27 'yong qiang.txt' (base) yongqiang@yongqiang:~/bash_work$
單引號(hào) (') - 雙引號(hào) (")
對(duì)于普通字符串或文本,單引號(hào)和雙引號(hào)的作用相同。
(base) yongqiang@yongqiang:~/bash_work$ echo "yongqiang" yongqiang (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo 'yongqiang' yongqiang (base) yongqiang@yongqiang:~/bash_work$
當(dāng)打印已定義的變量時(shí),需要使用雙引號(hào),使用單引號(hào)將被視為普通字符。
(base) yongqiang@yongqiang:~/bash_work$ NAME="yongqiang" (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo $NAME yongqiang (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo '$NAME' $NAME (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "$NAME" yongqiang (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ NAME='yongqiang' (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo $NAME yongqiang (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo '$NAME' $NAME (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo "$NAME" yongqiang (base) yongqiang@yongqiang:~/bash_work$
單引號(hào) ( '
) 和雙引號(hào) ( "
) 可以保存多個(gè)連續(xù)的空格。
(base) yongqiang@yongqiang:~/bash_work$ echo "yong qiang" yong qiang (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ echo 'yong qiang' yong qiang (base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ cat ./bash_script.sh #!/bin/bash echo "start" echo echo "Hello, world!" NAME="yongqiang!" echo $NAME echo echo "111!" COMMENT="Hello, $NAME" echo $COMMENT echo echo "222!" COMMENT='Hello, $NAME' echo $COMMENT echo "Hello, world!" echo echo "end" (base) yongqiang@yongqiang:~/bash_work$ (base) yongqiang@yongqiang:~/bash_work$ ./bash_script.sh start Hello, world! yongqiang! 111! Hello, yongqiang! 222! Hello, $NAME Hello, world! end (base) yongqiang@yongqiang:~/bash_work$
到此這篇關(guān)于Bash Shell中單引號(hào)和雙引號(hào)的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)Shell單引號(hào)和雙引號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- linux shell 中雙引號(hào)和單引號(hào)的區(qū)別解析
- Shell雙引號(hào)和單引號(hào)有哪些不同
- 每天一個(gè)Linux命令之shell單引號(hào)和雙引號(hào)的經(jīng)典解釋
- PowerShell中字符串使用單引號(hào)和雙引號(hào)的區(qū)別
- Shell腳本字符串單引號(hào)和雙引號(hào)的區(qū)別淺析
- Shell腳本中單引號(hào)(‘)和雙引號(hào)(“)的使用區(qū)別
- linux shell中單引號(hào)、雙引號(hào)、反引號(hào)、反斜杠的區(qū)別
- shell編程基礎(chǔ) 單引號(hào)和雙引號(hào)的區(qū)別
相關(guān)文章
shell腳本實(shí)現(xiàn)多進(jìn)程運(yùn)行的方法示例
這篇文章主要給大家分享了shell腳本實(shí)現(xiàn)多進(jìn)程運(yùn)行的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06慎用rm -rf /與 rm -rf /* 推薦使用mv代替rm
本文主要介紹了慎用rm -rf /與 rm -rf /* 推薦使用mv代替rm,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10Linux?shell中$(())、$()、``與${}的區(qū)別
本文主要介紹了Linux?shell中$(())、$()、``與${}的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06淺談Linux 二進(jìn)制包安裝MySQL的一些問(wèn)題
下面小編就為大家?guī)?lái)一篇淺談Linux 二進(jìn)制包安裝MySQL的一些問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03如何使用Shell腳本掩蓋Linux服務(wù)器上的操作痕跡(推薦)
這篇文章主要介紹了使用Shell腳本掩蓋Linux服務(wù)器上的操作痕跡,需要的朋友可以參考下2017-12-12shell腳本從SVN推送到多臺(tái)服務(wù)器的代碼
shell 腳本從SVN推送到多臺(tái)服務(wù)器,需要的朋友可以參考下2013-02-02