6

我一直在网上搜索这个,但是当你只输入引号时我无法理解 unix shell 终端在做什么

$ "

它给了你类似的东西

> 

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

4

4 回答 4

2

这是 Bash 手册中的说明:

3.1.2.3 双引号

将字符括在双引号 ('"') 中会保留引号内所有字符的字面值,但 '$'、'<code>'、'\' 以及启用历史扩展时的'!' 除外. 字符 '$' 和 '</code>' 在双引号中保留其特殊含义(请参阅 Shell 扩展)。反斜杠仅在后跟以下字符之一时才保留其特殊含义:'$'、'`'、 '"'、'\' 或换行符。在双引号内,删除后面跟有这些字符之一的反斜杠。没有特殊含义的字符前面的反斜杠保持不变。双引号可以用反斜杠在双引号中引用。如果启用,将执行历史扩展,除非出现“!” 出现在双引号中的使用反斜杠进行转义。'!' 前面的反斜杠 没有被删除。

当您键入一个双引号时,Bash 只是在等待您完成第二个双引号。

于 2013-05-21T20:31:13.987 回答
2

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

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

于 2013-05-21T21:58:14.023 回答
1

它向您显示它仍然将其视为一个命令。这让您可以在多行上格式化较长的命令以提高可读性。

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

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

引号:(添加新行)

正如查尔斯·达菲(Charles Duffy)所提到的,使用引号可以让您将论点放在多行中。但是,换行符成为您论点的一部分,例如:

$ touch "hello
> world"

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

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

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

$ touch hello \
> world

将给出相同的touch hello world结果(即,将两个参数传递给 touch & 从而创建两个文件helloworld)。

括号(执行多个命令)

括号将让您将命令链接在一起,因此:

$ (touch hello
> world)

将执行touch hellothen world,即相当于在touch hello; world一行中执行。(可能是-bash: world: command not found为世界指挥)。

因此,引号将输入多行输入并保留您输入的任何换行符作为其中的一部分。

于 2013-05-21T20:34:54.827 回答
0

就像六氰说的,它在等你完成你的命令。

双引号扩展 shell 变量。所以你可以用变量构建你的命令。我会添加一个例子:

kent$  x=eq   
kent$  "s$x" 3
1
2
3
于 2013-05-21T20:37:14.140 回答