设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间02 现在时间02 缓存数据 “秋是慢慢入的但冷是突然的” 就像失望是慢慢累积的 但不爱是突然的

“秋是慢慢入的但冷是突然的” 就像失望是慢慢累积的 但不爱是突然的 -- 拾忆

查看: 1096|回复: 2

Bash Shell中单引号和双引号的区别小结

[复制链接]

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
29
主题
21
精华
0
金钱
82
积分
52
注册时间
2023-10-3
最后登录
2025-3-12

发表于 2024-11-2 00:21:27 | 显示全部楼层 |阅读模式
目录


  • 单引号
  • 双引号
  • 单引号 (') - 双引号 (")
在Bash Shell中,单引号(
  1. '
复制代码
)和双引号(
  1. "
复制代码
)都用于定义字符串,但它们之间有一些重要的区别。这些区别影响字符串的解释方式,变量的扩展,以及特殊字符的处理。

单引号

字面值:在单引号中的所有字符都会被视为字面值,即它们的特殊含义不会被解释。例如,
  1. $
复制代码
用于变量扩展,但在单引号中它只会被视为普通的美元符号。
  1. echo '$HOME'
复制代码
上面的命令将输出
  1. $HOME
复制代码
,而不是展开为环境变量
  1. HOME
复制代码
的值。
不允许嵌套单引号:单引号内不能包含其他单引号,即使它们被转义。要在单引号字符串中包含单引号,你需要使用一种特殊的语法:
  1. echo 'It'\''s a test'
复制代码
这将输出
  1. It's a test
复制代码

单引号 (
  1. '
复制代码
) 用于保留字符的字面含义,特殊字符在单引号里面,都会变为普通字符,例如
  1. *
复制代码
  1. $
复制代码
、反斜杠 (
  1. \
复制代码
) 等。
  1. (base) yongqiang@yongqiang:~/bash_work$ ls -l
  2. total 0
  3. -rwxr-xr-x 1 yongqiang yongqiang 231 May 13 23:24 bash_script.sh
  4. -rw-r--r-- 1 yongqiang yongqiang   0 May 15 09:31 yongqiang.txt
  5. (base) yongqiang@yongqiang:~/bash_work$
  6. (base) yongqiang@yongqiang:~/bash_work$ echo *
  7. bash_script.sh yongqiang.txt
  8. (base) yongqiang@yongqiang:~/bash_work$
  9. (base) yongqiang@yongqiang:~/bash_work$ echo '*'
  10. *
  11. (base) yongqiang@yongqiang:~/bash_work$
  12. (base) yongqiang@yongqiang:~/bash_work$ echo "*"
  13. *
  14. (base) yongqiang@yongqiang:~/bash_work$
复制代码
  1. (base) yongqiang@yongqiang:~/bash_work$ echo $
  2. $
  3. (base) yongqiang@yongqiang:~/bash_work$
  4. (base) yongqiang@yongqiang:~/bash_work$ echo '$'
  5. $
  6. (base) yongqiang@yongqiang:~/bash_work$
  7. (base) yongqiang@yongqiang:~/bash_work$ echo "$"
  8. $
  9. (base) yongqiang@yongqiang:~/bash_work$

  10. (base) yongqiang@yongqiang:~/bash_work$ echo $PATH
  11. /home/yongqiang/bin:/home/yongqiang/miniconda3/bin:/home/yongqiang/miniconda3/condabin:......:/home/yongqiang/software/platform-tools/
  12. (base) yongqiang@yongqiang:~/bash_work$
  13. (base) yongqiang@yongqiang:~/bash_work$ echo '$PATH'
  14. $PATH
  15. (base) yongqiang@yongqiang:~/bash_work$
  16. (base) yongqiang@yongqiang:~/bash_work$ echo $PATH
  17. /home/yongqiang/bin:/home/yongqiang/miniconda3/bin:/home/yongqiang/miniconda3/condabin:......:/home/yongqiang/software/platform-tools/
  18. (base) yongqiang@yongqiang:~/bash_work$

  19. (base) yongqiang@yongqiang:~/bash_work$ echo $USER
  20. yongqiang
  21. (base) yongqiang@yongqiang:~/bash_work$
  22. (base) yongqiang@yongqiang:~/bash_work$ echo '$USER'
  23. $USER
  24. (base) yongqiang@yongqiang:~/bash_work$
  25. (base) yongqiang@yongqiang:~/bash_work$ echo "$USER"
  26. yongqiang
  27. (base) yongqiang@yongqiang:~/bash_work$

  28. (base) yongqiang@yongqiang:~/bash_work$ echo $((5 + 1))
  29. 6
  30. (base) yongqiang@yongqiang:~/bash_work$
  31. (base) yongqiang@yongqiang:~/bash_work$ echo '$((5 + 1))'
  32. $((5 + 1))
  33. (base) yongqiang@yongqiang:~/bash_work$
  34. (base) yongqiang@yongqiang:~/bash_work$ echo "$((5 + 1))"
  35. 6
  36. (base) yongqiang@yongqiang:~/bash_work$

  37. (base) yongqiang@yongqiang:~/bash_work$ echo $(echo $USER)
  38. yongqiang
  39. (base) yongqiang@yongqiang:~/bash_work$
  40. (base) yongqiang@yongqiang:~/bash_work$ echo '$(echo $USER)'
  41. $(echo $USER)
  42. (base) yongqiang@yongqiang:~/bash_work$
  43. (base) yongqiang@yongqiang:~/bash_work$ echo "$(echo $USER)"
  44. yongqiang
  45. (base) yongqiang@yongqiang:~/bash_work$
复制代码
反斜杠在单引号中变成了普通字符。如果在单引号之中,还要使用单引号,不能使用转义,需要在外层的单引号前面加上一个(
  1. $
复制代码
),然后再对里层的单引号转义。
  1. (base) yongqiang@yongqiang:~/bash_work$ echo '\'
  2. \
  3. (base) yongqiang@yongqiang:~/bash_work$
  4. (base) yongqiang@yongqiang:~/bash_work$ echo 'It's me!'
  5. bash: !': event not found
  6. (base) yongqiang@yongqiang:~/bash_work$
  7. (base) yongqiang@yongqiang:~/bash_work$ echo 'It\'s me!'
  8. bash: !': event not found
  9. (base) yongqiang@yongqiang:~/bash_work$
  10. (base) yongqiang@yongqiang:~/bash_work$ echo $'It\'s me!'
  11. It's me!
  12. (base) yongqiang@yongqiang:~/bash_work$
复制代码
在双引号之中使用单引号。
  1. (base) yongqiang@yongqiang:~/bash_work$ echo "It's me!"
  2. It's me!
  3. (base) yongqiang@yongqiang:~/bash_work$
复制代码
双引号

变量扩展:双引号中的变量会被扩展,即
  1. $var
复制代码
会被替换为变量
  1. var
复制代码
的值。
  1. name="John"
  2. echo "Hello, $name"
复制代码
上面的命令将输出
  1. Hello, John
复制代码

特殊字符解释:双引号中的特殊字符,如
  1. \n
复制代码
(换行)和
  1. \t
复制代码
(制表符),会被解释。
  1. echo "Line 1\nLine 2"
复制代码
这将输出两行文本,而不是一行。
感叹号问题:双引号中的感叹号
  1. !
复制代码
可能会引起历史扩展问题,这需要特别注意。
双引号 (
  1. "
复制代码
) 比单引号 (
  1. '
复制代码
) 宽松。在双引号中,反引号 (
  1. `
复制代码
)、
  1. $
复制代码
、反斜杠 (
  1. \
复制代码
) 三个特殊字符会被 Bash 自动扩展。
  1. $
复制代码
符号用于引用变量,反引号 (
  1. `
复制代码
) 用于执行子命令。反斜杠 (
  1. \
复制代码
) 在双引号之中用来转义。
  1. (base) yongqiang@yongqiang:~/bash_work$ echo ?
  2. ?
  3. (base) yongqiang@yongqiang:~/bash_work$
  4. (base) yongqiang@yongqiang:~/bash_work$ echo '?'
  5. ?
  6. (base) yongqiang@yongqiang:~/bash_work$
  7. (base) yongqiang@yongqiang:~/bash_work$ echo "?"
  8. ?
  9. (base) yongqiang@yongqiang:~/bash_work$
复制代码
  1. (base) yongqiang@yongqiang:~/bash_work$ echo $SHELL
  2. /bin/bash
  3. (base) yongqiang@yongqiang:~/bash_work$
  4. (base) yongqiang@yongqiang:~/bash_work$ echo '$SHELL'
  5. $SHELL
  6. (base) yongqiang@yongqiang:~/bash_work$
  7. (base) yongqiang@yongqiang:~/bash_work$ echo "$SHELL"
  8. /bin/bash
  9. (base) yongqiang@yongqiang:~/bash_work$
复制代码
使用反斜杠,在双引号之中插入双引号,或者插入反斜杠本身。
  1. (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!"
  2. It's me!
  3. (base) yongqiang@yongqiang:~/bash_work$
复制代码
Bash 正常情况下会将换行符解释为命令结束,但是换行符在双引号之中就失去了这种特殊作用,只用来换行。可以输入多行,
  1. echo
复制代码
命令会将换行符原样输出,显示的时候正常解释为换行。
  1. (base) yongqiang@yongqiang:~/bash_work$ echo "yong
  2. > qiang"
  3. yong
  4. qiang
  5. (base) yongqiang@yongqiang:~/bash_work$
复制代码
如果文件名中包含空格,需要使用双引号或单引号,将文件名放在里面。
  1. (base) yongqiang@yongqiang:~/bash_work$ ls -l
  2. total 0
  3. -rwxr-xr-x 1 yongqiang yongqiang 106 May 13 20:11 bash_script.sh
  4. (base) yongqiang@yongqiang:~/bash_work$
  5. (base) yongqiang@yongqiang:~/bash_work$ touch "yong qiang.txt"
  6. (base) yongqiang@yongqiang:~/bash_work$
  7. (base) yongqiang@yongqiang:~/bash_work$ ls -l
  8. total 0
  9. -rwxr-xr-x 1 yongqiang yongqiang 106 May 13 20:11  bash_script.sh
  10. -rw-r--r-- 1 yongqiang yongqiang   0 May 13 21:27 'yong qiang.txt'
  11. (base) yongqiang@yongqiang:~/bash_work$
  12. (base) yongqiang@yongqiang:~/bash_work$ ls -l "yong qiang.txt"
  13. -rw-r--r-- 1 yongqiang yongqiang 0 May 13 21:27 'yong qiang.txt'
  14. (base) yongqiang@yongqiang:~/bash_work$
  15. (base) yongqiang@yongqiang:~/bash_work$ ls -l 'yong qiang.txt'
  16. -rw-r--r-- 1 yongqiang yongqiang 0 May 13 21:27 'yong qiang.txt'
  17. (base) yongqiang@yongqiang:~/bash_work$
复制代码
单引号 (') - 双引号 (")

对于普通字符串或文本,单引号和双引号的作用相同。
  1. (base) yongqiang@yongqiang:~/bash_work$ echo "yongqiang"
  2. yongqiang
  3. (base) yongqiang@yongqiang:~/bash_work$
  4. (base) yongqiang@yongqiang:~/bash_work$ echo 'yongqiang'
  5. yongqiang
  6. (base) yongqiang@yongqiang:~/bash_work$
复制代码
当打印已定义的变量时,需要使用双引号,使用单引号将被视为普通字符。
  1. (base) yongqiang@yongqiang:~/bash_work$ NAME="yongqiang"
  2. (base) yongqiang@yongqiang:~/bash_work$
  3. (base) yongqiang@yongqiang:~/bash_work$ echo $NAME
  4. yongqiang
  5. (base) yongqiang@yongqiang:~/bash_work$
  6. (base) yongqiang@yongqiang:~/bash_work$ echo '$NAME'
  7. $NAME
  8. (base) yongqiang@yongqiang:~/bash_work$
  9. (base) yongqiang@yongqiang:~/bash_work$ echo "$NAME"
  10. yongqiang
  11. (base) yongqiang@yongqiang:~/bash_work$

  12. (base) yongqiang@yongqiang:~/bash_work$ NAME='yongqiang'
  13. (base) yongqiang@yongqiang:~/bash_work$
  14. (base) yongqiang@yongqiang:~/bash_work$ echo $NAME
  15. yongqiang
  16. (base) yongqiang@yongqiang:~/bash_work$
  17. (base) yongqiang@yongqiang:~/bash_work$ echo '$NAME'
  18. $NAME
  19. (base) yongqiang@yongqiang:~/bash_work$
  20. (base) yongqiang@yongqiang:~/bash_work$ echo "$NAME"
  21. yongqiang
  22. (base) yongqiang@yongqiang:~/bash_work$
复制代码
单引号 (
  1. '
复制代码
) 和双引号 (
  1. "
复制代码
) 可以保存多个连续的空格。
  1. (base) yongqiang@yongqiang:~/bash_work$ echo "yong    qiang"
  2. yong    qiang
  3. (base) yongqiang@yongqiang:~/bash_work$
  4. (base) yongqiang@yongqiang:~/bash_work$ echo 'yong    qiang'
  5. yong    qiang
  6. (base) yongqiang@yongqiang:~/bash_work$
复制代码
  1. (base) yongqiang@yongqiang:~/bash_work$ cat ./bash_script.sh
  2. #!/bin/bash

  3. echo "start"
  4. echo
  5. echo "Hello, world!"

  6. NAME="yongqiang!"
  7. echo $NAME
  8. echo
  9. echo "111!"

  10. COMMENT="Hello, $NAME"
  11. echo $COMMENT
  12. echo
  13. echo "222!"

  14. COMMENT='Hello, $NAME'
  15. echo $COMMENT

  16. echo "Hello, world!"
  17. echo
  18. echo "end"

  19. (base) yongqiang@yongqiang:~/bash_work$
  20. (base) yongqiang@yongqiang:~/bash_work$ ./bash_script.sh
  21. start

  22. Hello, world!
  23. yongqiang!

  24. 111!
  25. Hello, yongqiang!

  26. 222!
  27. Hello, $NAME
  28. Hello, world!

  29. end
  30. (base) yongqiang@yongqiang:~/bash_work$
复制代码
到此这篇关于Bash Shell中单引号和双引号的区别小结的文章就介绍到这了,更多相关Shell单引号和双引号内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
11
积分
2
注册时间
2024-12-27
最后登录
2024-12-27

发表于 2025-1-22 12:05:10 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
18
积分
16
注册时间
2022-12-27
最后登录
2022-12-27

发表于 昨天 10:31 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表