单引号和双引号是由“ bash”还是“ echo”处理的?

用户名

当您执行以下操作时:

echo 'Hello World'

或像这样:

x=12345
echo "x is: $x"

在第一个示例中,该echo命令会接收'Hello World'还是会接收Hello World

在第二个示例中,该echo命令接收"x is: $x"还是接收x is: 12345

所以基本上我的问题是:单引号和双引号是由bash还是由处理echo

吉勒斯“别再邪恶了”

bash处理引号,变量扩展,通配符以及bash手册中有关扩展的所有其他内容

例如,当您运行bash命令时echo "x is: $x",bash对此进行解析以发现它需要echo使用一个参数()运行该命令x is: 12345给定echo "x is" "$x",bashecho使用两个参数运行x is12345-这就是为什么引号内的两个空格得以保留(它们是参数的一部分,该参数回显了未修改的内容),但引号外的两个空格却未被保留(对于shell,两个用于分隔参数的空格与单个空格一样好,并且echo总是在它们之间打印单个空格)。

echo命令(或任何其他命令)无法知道哪个shell命令产生了该参数x is: 12345,或者实际上是否知道是否涉及任何shell。以下是产生此参数的一些示例命令:

echo "x is: 12345"
echo 'x is: 12345'
echo x\ is:\ 12345
echo "x is: $x"
echo 'x is:'\ "$x"
echo "$(echo "x ")is: $x"
# Assume there is no other file whose name begins with x in the current directory
touch "x is: $x"; echo x*

也可以exec "echo", "x is: 12345"在Perl或execlp("echo", "echo", "x is: 12345")C中,等等。

这适用于每个命令。对于其他壳,尽管它们每个都有一组稍微不同(或明显不同)的扩展集,但同样的原理也适用。

另一方面,选项由命令处理。例如,ls -l -tls -l "-t"在bash(或任何类似的壳)都运行ls在完全相同的方式,用两个参数-l-t这就是为什么如果您想运行ls以显示有关名为的文件的信息,没有任何形式的Shell引用都无法帮助您的原因-t您可以使用进行操作ls -l -- -t,即--作为参数传递这是大多数命令遵循的约定:后面的任何内容都不--作为选项进行解析。再次,这是命令的功能;对于外壳,前导破折号没什么特别的。

反斜杠是一件很棘手的事情。在bash和其他shell中,任何引号外的反斜杠表示下一个字符失去其特殊含义。例如,echo \"x\ is:\ 12345\"prints "x is: 12345",因为每个以反斜杠开头的字符都失去了特殊的含义(引号的语法",空格的单词分隔符)。但是某些命令也会解释反斜杠。当它们出现时,您需要确保反斜杠到达了它们。例如,在bash中,该echo命令默认情况下会按字面意义显示反斜杠,但是如果您通过该选项-eshopt xpg_echo运行,则echo会有其自己的转义序列(对于bash,echo在不同的Shell中和在不同的系统上的命令对于它们是否特别对待反斜杠有不同的规则)。例如,echo 'a\nb'打印a\nb,同时echo -e 'a\nb'打印a-newline-b因为\n手段“换行”来echo -e另一方面,由于外壳将其展开,因此这里的echo a\nb打印内容“引用下一个字符”。anb\n\

另外,当涉及多个外壳(例如,SSH)时,请务必小心。当您ssh在外壳程序中运行时,本地外壳程序将照常解析命令。SSH客户端在其非选项参数之间添加空格,并将结果字符串发送到SSH服务器。SSH服务器将此字符串传递到远程Shell。这意味着在您在终端或shell脚本中键入的内容与在远程计算机上执行的内容之间有两轮完整的Shell扩展。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

处理单引号和双引号php和ajax

来自分类Dev

bash:通过grep匹配单引号和双引号

来自分类Dev

bash:通过grep匹配单引号和双引号

来自分类Dev

bash:通过grep匹配单引号和双引号

来自分类Dev

Bash PS1和单引号与双引号

来自分类Dev

在Bash中在双引号和单引号中使用反引号的区别

来自分类Dev

在 Python str.replace 中以相同的方式处理双引号和单引号?

来自分类Dev

定义别名时是单引号还是双引号?

来自分类Dev

定义别名时是单引号还是双引号?

来自分类Dev

双引号内的单引号和Bash参考手册

来自分类Dev

bash中单引号$'string'和双引号$“ string”有什么区别?

来自分类Dev

Bash脚本,带有带单引号和双引号的命令

来自分类Dev

bash脚本执行命令带有双引号,单引号和空格

来自分类Dev

双引号内的单引号和Bash参考手册

来自分类Dev

bash中单引号$'string'和双引号$“ string”有什么区别?

来自分类Dev

在 bash 脚本中使用双引号和单引号来调用程序

来自分类Dev

如何执行具有很多嵌套单引号和双引号以及bash中带引号的变量的命令

来自分类Dev

在bash中将单引号与echo一起使用

来自分类Dev

JS 一种知道属性值是双引号、单引号还是裸的方法?

来自分类Dev

PHP MySQL我准备了插入以处理引号和双引号

来自分类Dev

如何在bash脚本中转义双引号字符串中的单引号?

来自分类Dev

带十六进制双引号和不带双引号的ECHO行为

来自分类Dev

Bash脚本双引号

来自分类Dev

Bash脚本双引号

来自分类Dev

bash中的双引号

来自分类Dev

psycopg,双引号和单引号插入

来自分类Dev

单引号和双引号,如何安排?

来自分类Dev

sed中的单引号和双引号

来自分类Dev

groovy用单引号和双引号替换双引号

Related 相关文章

  1. 1

    处理单引号和双引号php和ajax

  2. 2

    bash:通过grep匹配单引号和双引号

  3. 3

    bash:通过grep匹配单引号和双引号

  4. 4

    bash:通过grep匹配单引号和双引号

  5. 5

    Bash PS1和单引号与双引号

  6. 6

    在Bash中在双引号和单引号中使用反引号的区别

  7. 7

    在 Python str.replace 中以相同的方式处理双引号和单引号?

  8. 8

    定义别名时是单引号还是双引号?

  9. 9

    定义别名时是单引号还是双引号?

  10. 10

    双引号内的单引号和Bash参考手册

  11. 11

    bash中单引号$'string'和双引号$“ string”有什么区别?

  12. 12

    Bash脚本,带有带单引号和双引号的命令

  13. 13

    bash脚本执行命令带有双引号,单引号和空格

  14. 14

    双引号内的单引号和Bash参考手册

  15. 15

    bash中单引号$'string'和双引号$“ string”有什么区别?

  16. 16

    在 bash 脚本中使用双引号和单引号来调用程序

  17. 17

    如何执行具有很多嵌套单引号和双引号以及bash中带引号的变量的命令

  18. 18

    在bash中将单引号与echo一起使用

  19. 19

    JS 一种知道属性值是双引号、单引号还是裸的方法?

  20. 20

    PHP MySQL我准备了插入以处理引号和双引号

  21. 21

    如何在bash脚本中转义双引号字符串中的单引号?

  22. 22

    带十六进制双引号和不带双引号的ECHO行为

  23. 23

    Bash脚本双引号

  24. 24

    Bash脚本双引号

  25. 25

    bash中的双引号

  26. 26

    psycopg,双引号和单引号插入

  27. 27

    单引号和双引号,如何安排?

  28. 28

    sed中的单引号和双引号

  29. 29

    groovy用单引号和双引号替换双引号

热门标签

归档