如何跳过命令行中“&”符号的评估?

如何跳过命令行中“&”符号的评估?

在命令行中输入 Google 地图路线 URL(用于通过终端使用 Chromium 浏览器打开)时,&URL 中有一个与号 ( ),但由于 Unix 的东西就是 Unix 的东西,终端会将其打断。我是否可以在终端中输入一些内容,当命令实际通过时,这些内容会被视为与号?

;amp; 能起作用吗?

答案1

您需要将地址放在引号中:

chromium-browser 'http://whatever.com/?x=1&y=2'

答案2

引号可以解决这个问题,但是你也可以用反斜杠来转义:

echo http://whatever.com/?x=1\&y=2

并不是说这样更好,无论如何,这只是这种情况的另一种选择。

答案3

在这种情况下实际上并不重要,但单引号和双引号之间存在差异。

双引号将替换特殊字符,例如“$”和引号,而单引号将按字面意思处理除结尾的单引号之外的所有内容。

两者都将文本组合在一起,这导致 Chromium 将其视为单个参数,并且“;#&”等字符在该上下文中没有特殊含义。

这显示使用 '\' 来转义双引号内的双引号以及反斜杠本身:

mat@sen:~$ echo "a&bc\\#de\"f"
a&bc\#de"f

使用单引号没有任何变化:

mat@sen:~$ echo 'a&bc\\#de\"f'
a&bc\\#de\"f

如果没有引号,则 '&' 会将其拆分为两个命令:

mat@sen:~$ echo a&bc\\#de\"f
[1] 2619
a
bc\#de"f: command not found
[1]+  Done                    echo a
[1]+  Done                    echo a

通常,处理一种引号时,您可以将其包装在另一种类型中,但您可能会遇到以下问题:

mat@sen:~$ echo "'a'bc$foo"
'a'bc

单引号不会被替换,但 '$' 会被替换。但以下语法有效:

mat@sen:~$ echo $'a\'bc$foo'
a'bc$foo

相关内容