Linux Shell - 单引号 ( ' )、双引号 ( " ) 和反引号 (`)

Bash 只有一种数据类型,即字符串。用户输入的数据,Bash 都视为字符串。

1. 单引号 (')

单引号 (') 用于保留字符的字面含义,特殊字符在单引号里面,都会变为普通字符,例如 *$、反斜杠 (\) 等。

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

反斜杠在单引号中变成了普通字符。如果在单引号之中,还要使用单引号,不能使用转义,需要在外层的单引号前面加上一个($),然后再对里层的单引号转义。

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

2. 双引号 (")

双引号 (") 比单引号 (') 宽松。在双引号中,反引号 (`)、$、反斜杠 (\) 三个特殊字符会被 Bash 自动扩展。$ 符号用于引用变量,反引号 (`) 用于执行子命令。反斜杠 (\) 在双引号之中用来转义。

(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 正常情况下会将换行符解释为命令结束,但是换行符在双引号之中就失去了这种特殊作用,只用来换行。可以输入多行,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$

3. 反引号 (`)

MARKDOWN 编辑反引号 (`)

MARKDOWN 编辑反引号 (`` ` ``)

调用命令或者将命令的输出赋予变量,则必须使用反引号包含命令,这样命令才会执行。反引号的作用和 $(命令) 是一样的,反引号容易和单引号混淆,推荐使用 $(命令) 的方式调用命令。

(base) yongqiang@yongqiang:~/bash_work$ echo ls
ls
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo 'ls'
ls
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo "ls"
ls
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo `ls`
bash_script.sh yongqiang.txt
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo '`ls`'
`ls`
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo "`ls`"
bash_script.sh
yongqiang.txt
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo $(ls)
bash_script.sh yongqiang.txt
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo "$(ls)"
bash_script.sh
yongqiang.txt
(base) yongqiang@yongqiang:~/bash_work$

反引号 (`) 括起来的命令又被单引号 (') 括起来,则命令不会执行,被当成普通字符输出。
反引号 (`) 括起来的命令又被双引号 ( " ) 括起来,则命令会执行。

(base) yongqiang@yongqiang:~/bash_work$ echo date
date
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo 'date'
date
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo "date"
date
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo `date`
Sun May 15 10:00:31 CST 2022
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo '`date`'
`date`
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo "`date`"
Sun May 15 10:00:48 CST 2022
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo $(date)
Sun May 15 10:28:34 CST 2022
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo "$(date)"
Sun May 15 10:34:07 CST 2022
(base) yongqiang@yongqiang:~/bash_work$
# 调用命令 echo `cal` 和 echo $(cal) 输出单行
(base) yongqiang@yongqiang:~/bash_work$ echo `cal`
May 2022 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ echo $(cal)
May 2022 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
(base) yongqiang@yongqiang:~/bash_work$# 调用命令 echo "$(cal)" 输出原始格式
(base) yongqiang@yongqiang:~/bash_work$ echo "$(cal)"May 2022
Su Mo Tu We Th Fr Sa1  2  3  4  5  6  78  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31(base) yongqiang@yongqiang:~/bash_work$

4. 单引号 (') - 双引号 (")

对于普通字符串或文本,单引号和双引号的作用相同。

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

单引号 ( ' ) 和双引号 ( " ) 可以保存多个连续的空格。

(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/bashecho "start"
echo
echo "Hello, world!"NAME="yongqiang!"
echo $NAME
echo
echo "111!"COMMENT="Hello, $NAME"
echo $COMMENT
echo
echo "222!"COMMENT='Hello, $NAME'
echo $COMMENTecho "Hello, world!"
echo
echo "end"(base) yongqiang@yongqiang:~/bash_work$
(base) yongqiang@yongqiang:~/bash_work$ ./bash_script.sh
startHello, world!
yongqiang!111!
Hello, yongqiang!222!
Hello, $NAME
Hello, world!end
(base) yongqiang@yongqiang:~/bash_work$

References

https://yongqiang.blog.csdn.net/
https://www.w3cschool.cn/bashshell/
https://wangdoc.com/bash/index.html

Linux Shell - 单引号 ( ‘ )、双引号 ( “ ) 和反引号 ( ` )相关推荐

  1. Linux Shell 单引号 双引号 使用区别

    From:https://blog.csdn.net/lifu119/article/details/7868231 在bash脚本中,有三种引号 1. 单引号 ' 2. 双引号 " 3. ...

  2. 描述linux shell单引号,Linux shell 单引号和双引号

    在编写shell脚本的时候经常会用到引号,有些时候却老是忘记单引号和双引号之间的区别, 所以就整理一下供以后脑子不好使了的时候前来复习一下.首先说下他们的共同点: 好像就只有 一个,就是它们都可以用来 ...

  3. shell 单引号 双引号 反引号 嵌套单双引号 看这篇就够了

    1.编写shell脚本 #!/bin/bash do_date=$1 echo '$do_date' echo "$do_date" echo "'$do_date'&q ...

  4. Linux Shell中单引号、双引号、反引号的解释

    Linux Shell中单引号.双引号.反引号的解释 转自https://zhuanlan.zhihu.com/p/166184390 1.单引号(' ') 单引号所见即所得,直接显示单引号里的内容. ...

  5. 【Linux】Shell(Bash)单引号、双引号、不加引号和反引号用法和区别详解

    简要总结 不加引号:不会将含有空格的字符串视为一个整体输出, 如果内容中有变量等,会先把变量解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续 ...

  6. Linux 中三种引号(单引号、双引号、反引号)的区别

    1.双引号 保护特殊元字符和通配符不被 shell 解析,但是允许变量和命令的解析,以及转义符的解析. 2.单引号 单引号内不允许任何变量.元字符.通配符.转义符被 shell 解析,均被原样输出. ...

  7. linux终端反引号怎么使用,单引号、双引号和反引号使用方法

    首先向马哥和马哥团队敬个礼,谢谢你们带我进入Linux的世界,刚开始接触linux时,经常看到单引号.双引号和反引号特殊符号,经常搞混淆和误用,应该用双引号,有时用到单引号.经过几天的混乱引用,总算搞 ...

  8. centos shell基础 alias 变量单引号 双引号 history 错误重定向 21 jobs 环境变量 .bash_history source配置文件 nohup ...

    centos shell基础知识 alias  变量单引号 双引号   history 错误重定向 2>&1  jobs  环境变量 .bash_history  source配置文件 ...

  9. Golang的单引号、双引号与反引号

    Go语言的字符串类型string在本质上就与其他语言的字符串类型不同: Java的String.C++的std::string以及Python3的str类型都只是定宽字符序列 Go语言的字符串是一个用 ...

最新文章

  1. Hadoop自学笔记(二)HDFS简单介绍
  2. Redis初学:4(Redis的常用命令)
  3. Java数据结构和算法(三)——冒泡、选择、插入排序算法
  4. 关于我自己的三个层次
  5. 随想录(redis的学习和使用)
  6. 记一次绕过安全狗与360艰难提权
  7. JAVA学习 第5天
  8. 苹果手用计算机解锁手机密码,苹果手机怎么强制解锁 iPhone强制解锁密码教程...
  9. BRVAH万能适配器
  10. Linux学习笔记(三) -- Visual Studio Code 的安装与卸载
  11. MATLAB中怎么表示对数函数及e
  12. 关于网络游戏《诛仙》中9级铁玉赠送任务的思考
  13. Android 包大小优化总结
  14. 南开大学计算机宁博,周亚训 教授
  15. GDK8——强大的Linux内核调试工具
  16. Android的.9图片使用问题
  17. 25-30K ☀️|网络工程师职业技巧与经典面试题✨
  18. 15-5 电子词典
  19. 集成支付宝SDK流程
  20. 99%IT人都应该收藏的学习,找资料必备之网站

热门文章

  1. Google 数据可视化团队总结的可视化硬核指南!
  2. 做自媒体值实用的九个网站,身为老司机的你你用过没?
  3. 张家界湘西凤凰旅游攻略:本地人亲授凤凰古城不上当经验!
  4. CComboBox控件详解
  5. 申请电商CMA质检报告有哪些好处?
  6. phpcms v9 首页 html,PHPCMS V9 TAG静态页面实现教程
  7. 一体机怎么修复音频服务器,修理电脑一体机的方法有哪些
  8. 沃尔玛社区店2019年第三季度销售额和客流双增长
  9. 小米4c手机显示无服务器,小米4c的出现让小米2S用户终于找到换手机的理由!
  10. 神经网络基本原理简明教程