在shell终端中键入引号时会发生什么

时间:2013-05-21 20:26:36

标签: shell unix

我一直在网上搜索这个,但是当你只输入一个引号“

时,我无法理解unix shell终端正在做什么
$ "

它给你这样的东西

> 

您可以输入文本和命令。 然后,如果再次输入单个引号字符“它将退出>提示并返回常规$提示符。

4 个答案:

答案 0 :(得分:2)

"命令行上的

bash启动(或完成,如果之前还有另一个)双引号字符串(相当明显的命名约定)。 '启动单引号字符串。 bash期望这些成对出现,并且由一对类型的引号括起来的整个字符串受到关于如何在其中扩展和/或组合事物的不同规则的约束。由于您只键入一个"bash继续阅读更多输入,等待您在决定它认为您要求它做什么之前输入结束语。

这两种类型的引号对于命名文件,命令,参数等非常有用,否则这些文件,命令,参数将被分割为空格或其他字符。单引号也会影响变量在字符串中的扩展方式。这些是最常见的用途,但还有其他用途。请阅读man bash以获取更多信息。

答案 1 :(得分:1)

它向你展示它仍然将它视为一个命令。这样就可以在很多行上格式化更长的命令,以便易读。

AFAIK,括号或反斜杠在大多数shell中都会提供相同的功能。

编辑 +1 Charles Duffy 的评论;只是为了进一步扩展我上面提到的三者之间的差异(我没有意识到,因此可能有助于指出它们)。在Bash shell(OSX)中:

引号:(添加新行)

使用引号,正如Charles Duffy所提到的,允许你将你的论点放在多行上。然而,新的行字符成为你的论点的一部分,例如:

$ touch "hello
> world"

将为您提供一个文件名,其中包含换行符控制字符作为其名称的一部分。

反斜杠(继续相同的命令)

在一行末尾添加反斜杠将进入多行模式,但会继续添加到同一命令,例如:

$ touch hello \
> world

将与touch hello world相同(即将两个参数传递给touch& so,因此创建两个文件helloworld)。

括号(执行多个命令)

括号将允许您将命令链接在一起,所以:

$ (touch hello
> world)

将执行touch hello然后world,即它相当于在一行上执行touch hello; world。 (可能给世界命令-bash: world: command not found。)

所以引号将进入多行输入&还保留您输入的任何新行字符。

答案 2 :(得分:0)

这就是Bash手册所说的:

  

3.1.2.3双引号

     

用双引号('“')括起字符可保留文字   引号内所有字符的值,“$”除外,   '’, ‘\’, and, when history expansion is enabled, ‘!’. The characters ‘$’ and ‘'在双引号中保留其特殊含义(请参阅   壳牌扩张)。反斜杠只有在保留其特殊含义时才会使用   接下来是以下字符之一:'$','`',''','\'或   新队。在双引号内,后跟其中一个的反斜杠   这些字符被删除。没有的字符前面的反斜杠   特殊含义未经修改。可以引用双引号   在双引号内用前面的反斜杠。如果启用,   除非'!'出现在double中,否则将执行历史扩展   引号使用反斜杠进行转义。 '!'之前的反斜杠   没有删除。

当您输入单个双引号时,Bash正等着您完成第二个双引号。

答案 3 :(得分:0)

像六氰化物一样,它正等着你完成你的命令。

双引号扩展shell变量。所以你可以使用变量构建命令。我想补充一个例子:

kent$  x=eq   
kent$  "s$x" 3
1
2
3