Linux Shell - 单引号 ( ‘ )、双引号 ( “ ) 和反引号 ( ` )
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 - 单引号 ( ‘ )、双引号 ( “ ) 和反引号 ( ` )相关推荐
- Linux Shell 单引号 双引号 使用区别
From:https://blog.csdn.net/lifu119/article/details/7868231 在bash脚本中,有三种引号 1. 单引号 ' 2. 双引号 " 3. ...
- 描述linux shell单引号,Linux shell 单引号和双引号
在编写shell脚本的时候经常会用到引号,有些时候却老是忘记单引号和双引号之间的区别, 所以就整理一下供以后脑子不好使了的时候前来复习一下.首先说下他们的共同点: 好像就只有 一个,就是它们都可以用来 ...
- shell 单引号 双引号 反引号 嵌套单双引号 看这篇就够了
1.编写shell脚本 #!/bin/bash do_date=$1 echo '$do_date' echo "$do_date" echo "'$do_date'&q ...
- Linux Shell中单引号、双引号、反引号的解释
Linux Shell中单引号.双引号.反引号的解释 转自https://zhuanlan.zhihu.com/p/166184390 1.单引号(' ') 单引号所见即所得,直接显示单引号里的内容. ...
- 【Linux】Shell(Bash)单引号、双引号、不加引号和反引号用法和区别详解
简要总结 不加引号:不会将含有空格的字符串视为一个整体输出, 如果内容中有变量等,会先把变量解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续 ...
- Linux 中三种引号(单引号、双引号、反引号)的区别
1.双引号 保护特殊元字符和通配符不被 shell 解析,但是允许变量和命令的解析,以及转义符的解析. 2.单引号 单引号内不允许任何变量.元字符.通配符.转义符被 shell 解析,均被原样输出. ...
- linux终端反引号怎么使用,单引号、双引号和反引号使用方法
首先向马哥和马哥团队敬个礼,谢谢你们带我进入Linux的世界,刚开始接触linux时,经常看到单引号.双引号和反引号特殊符号,经常搞混淆和误用,应该用双引号,有时用到单引号.经过几天的混乱引用,总算搞 ...
- centos shell基础 alias 变量单引号 双引号 history 错误重定向 21 jobs 环境变量 .bash_history source配置文件 nohup ...
centos shell基础知识 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 ...
- Golang的单引号、双引号与反引号
Go语言的字符串类型string在本质上就与其他语言的字符串类型不同: Java的String.C++的std::string以及Python3的str类型都只是定宽字符序列 Go语言的字符串是一个用 ...
最新文章
- Hadoop自学笔记(二)HDFS简单介绍
- Redis初学:4(Redis的常用命令)
- Java数据结构和算法(三)——冒泡、选择、插入排序算法
- 关于我自己的三个层次
- 随想录(redis的学习和使用)
- 记一次绕过安全狗与360艰难提权
- JAVA学习 第5天
- 苹果手用计算机解锁手机密码,苹果手机怎么强制解锁 iPhone强制解锁密码教程...
- BRVAH万能适配器
- Linux学习笔记(三) -- Visual Studio Code 的安装与卸载
- MATLAB中怎么表示对数函数及e
- 关于网络游戏《诛仙》中9级铁玉赠送任务的思考
- Android 包大小优化总结
- 南开大学计算机宁博,周亚训 教授
- GDK8——强大的Linux内核调试工具
- Android的.9图片使用问题
- 25-30K ☀️|网络工程师职业技巧与经典面试题✨
- 15-5 电子词典
- 集成支付宝SDK流程
- 99%IT人都应该收藏的学习,找资料必备之网站