繁体   English   中英

bash如何解析双引号和单引号

[英]How does bash parse double quotes and single quotes

我必须为我的学校作业实现一个用 C 编写的 minishell,我目前正在解析用户输入,我有一个关于单引号和双引号的问题。

它们是如何解析的,我的意思是只要有两个以上的单引号/双引号,就可以有很多组合。 假设我有:“你好”。

如果我回显这个 bash output 将是你好,这是因为 bash 在“”中解释了“你好”,还是因为 bash 将其解释为:“”然后你好“”。 bash 如何解析多个链式引号:" "Hello" ":假设 a = Hello. bash 看到的是“a”还是 bash 看到的是“a”

Bash 对单引号和双引号的解析略有不同。 单引号比较简单,所以我会先介绍它们。

单引号字符串(或字符串的单引号部分——我会讲到)从一个单引号到下一个单引号。 单引号以外的任何内容(包括双引号、反斜杠、换行符等)都只是字符串中的文字字符。 但是下一个单引号结束了单引号部分。 没有办法将单引号放在单引号字符串中,因为下一个单引号将结束单引号部分。

您可以在单个“单词”(或字符串,或任何您想要的名称)中包含不同引号的部分。 因此,例如, ''hello''将被解析为零长度单引号部分、未引号部分hello ,然后是另一个零长度单引号部分。 由于它们之间没有空格,因此它们都被视为同一个单词的一部分(并且由于单引号部分的长度为零,因此它们对生成的单词/字符串完全没有影响)。

双引号略有不同,其中的某些字符保留其特殊含义。 例如, $可以引入变量或命令替换等(尽管结果不会像没有双引号那样受到分词的影响)。 反斜杠 function 作为双引号内的转义符,因此\$将被视为文字美元符号,而不是变量扩展或其他任何内容的开始。 其他可以通过反斜杠转义删除其特殊含义的字符是反斜杠本身,以及......双引号。 您可以在 escaping 它的双引号中包含一个双引号。 双引号部分结束于下一个非转义双引号。

所以比较:

echo ""hello""    # just prints hello
echo "\"hello\""  # prints "hello", because the escaped
                  # quotes are part of the string
echo "$PATH"      # prints the value of the PATH variable
echo "\$PATH"     # prints $PATH
echo ""'$PATH'""  # prints $PATH, because it's in
                  # single-quotes (with zero-lenght
                  # double-quoted sections on each side

此外,单引号和双引号在其他类型的引号中没有特殊含义。 所以:

echo "'hello'"    # prints 'hello', because the single-quotes
                  # are just ordinary characters in a
                  # double-quoted string
echo '"hello"'    # similarly, prints "hello"
echo "'$PATH'"    # prints the PATH variable with
                  # single-quotes around it (because
                  # $variable expands in double-quotes)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM