欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Bash?Shell中單引號和雙引號的區(qū)別小結(jié)

 更新時間:2024年11月01日 10:36:10   作者:黑風風  
在Bash中,單引號和雙引號都能定義字符串,但它們處理變量擴展、特殊字符的方式不同,本文就來介紹一下Bash?Shell中單引號和雙引號的區(qū)別小結(jié),感興趣的可以了解一下

在Bash Shell中,單引號(')和雙引號(")都用于定義字符串,但它們之間有一些重要的區(qū)別。這些區(qū)別影響字符串的解釋方式,變量的擴展,以及特殊字符的處理。

單引號

字面值:在單引號中的所有字符都會被視為字面值,即它們的特殊含義不會被解釋。例如,$用于變量擴展,但在單引號中它只會被視為普通的美元符號。

echo '$HOME'

上面的命令將輸出$HOME,而不是展開為環(huán)境變量HOME的值。

不允許嵌套單引號:單引號內(nèi)不能包含其他單引號,即使它們被轉(zhuǎn)義。要在單引號字符串中包含單引號,你需要使用一種特殊的語法:

echo 'It'\''s a test'

這將輸出It's a test

單引號 (') 用于保留字符的字面含義,特殊字符在單引號里面,都會變?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$

反斜杠在單引號中變成了普通字符。如果在單引號之中,還要使用單引號,不能使用轉(zhuǎn)義,需要在外層的單引號前面加上一個($),然后再對里層的單引號轉(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$

在雙引號之中使用單引號。

(base) yongqiang@yongqiang:~/bash_work$ echo "It's me!"
It's me!
(base) yongqiang@yongqiang:~/bash_work$

雙引號

變量擴展:雙引號中的變量會被擴展,即$var會被替換為變量var的值。

name="John"
echo "Hello, $name"

上面的命令將輸出Hello, John。

特殊字符解釋:雙引號中的特殊字符,如\n(換行)和\t(制表符),會被解釋。

echo "Line 1\nLine 2"

這將輸出兩行文本,而不是一行。

感嘆號問題:雙引號中的感嘆號!可能會引起歷史擴展問題,這需要特別注意。

雙引號 (") 比單引號 (') 寬松。在雙引號中,反引號 (`)、$、反斜杠 (\) 三個特殊字符會被 Bash 自動擴展。$ 符號用于引用變量,反引號 (`) 用于執(zhí)行子命令。反斜杠 (\) 在雙引號之中用來轉(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$

使用反斜杠,在雙引號之中插入雙引號,或者插入反斜杠本身。

(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 正常情況下會將換行符解釋為命令結(jié)束,但是換行符在雙引號之中就失去了這種特殊作用,只用來換行??梢暂斎攵嘈?,echo 命令會將換行符原樣輸出,顯示的時候正常解釋為換行。

(base) yongqiang@yongqiang:~/bash_work$ echo "yong
> qiang"
yong
qiang
(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
(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$

單引號 (') - 雙引號 (")

對于普通字符串或文本,單引號和雙引號的作用相同。

(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$ 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$

單引號 ( ' ) 和雙引號 ( " ) 可以保存多個連續(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中單引號和雙引號的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)Shell單引號和雙引號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • shell腳本實現(xiàn)多進程運行的方法示例

    shell腳本實現(xiàn)多進程運行的方法示例

    這篇文章主要給大家分享了shell腳本實現(xiàn)多進程運行的方法示例,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Vim命令合集

    Vim命令合集

    這篇文章主要介紹了Vim命令合集的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-10-10
  • 慎用rm -rf /與 rm -rf /* 推薦使用mv代替rm

    慎用rm -rf /與 rm -rf /* 推薦使用mv代替rm

    本文主要介紹了慎用rm -rf /與 rm -rf /* 推薦使用mv代替rm,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Linux?shell中$(())、$()、``與${}的區(qū)別

    Linux?shell中$(())、$()、``與${}的區(qū)別

    本文主要介紹了Linux?shell中$(())、$()、``與${}的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Linux文件操作命令詳解與實戰(zhàn)

    Linux文件操作命令詳解與實戰(zhàn)

    Linux 是一個文件為核心的操作系統(tǒng),文件的操作貫穿了系統(tǒng)管理和開發(fā)的方方面面,從創(chuàng)建、修改、查找文件到權(quán)限管理和壓縮操作,Linux 提供了豐富的命令支持,本文將深入解析 Linux 文件操作的常用命令,幫助讀者全面掌握其用法及應(yīng)用場景,需要的朋友可以參考下
    2024-12-12
  • 淺談Linux 二進制包安裝MySQL的一些問題

    淺談Linux 二進制包安裝MySQL的一些問題

    下面小編就為大家?guī)硪黄獪\談Linux 二進制包安裝MySQL的一些問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 在Linux中檢查文件大小的4種常用方法

    在Linux中檢查文件大小的4種常用方法

    在 Linux 操作系統(tǒng)中,經(jīng)常需要檢查文件的大小,無論是管理文件系統(tǒng)空間,還是確定文件傳輸?shù)拇笮∠拗?了解文件大小是非常重要的,本文將介紹 4 種常用的方法,幫助你在 Linux 中檢查文件的大小,需要的朋友可以參考下
    2023-09-09
  • Linux?中?ls?命令詳解

    Linux?中?ls?命令詳解

    這篇文章主要介紹了Linux?中?ls?命令詳解的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • 如何使用Shell腳本掩蓋Linux服務(wù)器上的操作痕跡(推薦)

    如何使用Shell腳本掩蓋Linux服務(wù)器上的操作痕跡(推薦)

    這篇文章主要介紹了使用Shell腳本掩蓋Linux服務(wù)器上的操作痕跡,需要的朋友可以參考下
    2017-12-12
  • shell腳本從SVN推送到多臺服務(wù)器的代碼

    shell腳本從SVN推送到多臺服務(wù)器的代碼

    shell 腳本從SVN推送到多臺服務(wù)器,需要的朋友可以參考下
    2013-02-02

最新評論