为什么 URL 中的 & 符号会导致以下命令失败?
我想通过在终端中运行 Safari 来打开网页,并将 URL 作为参数。
这按预期工作:
open -a safari "http://endic.naver.com/search.nhn?sLn=en&searchOption=all&query=good"
但是一旦删除引号,它就不会按预期工作:
open -a safari http://endic.naver.com/search.nhn?sLn=en&searchOption=all&query=good
相反,它返回:
[3] 5395
[4] 5396
[1] Done open -a safari http://endic.naver.com/search.nhn?sLn=en
[2] Done searchOption=all
似乎 URL 中的 “&” 符号被视为“在后台运行上一个命令”,尽管 URL 中的 “&” 符号后面没有空格。
答案1
“与”号是命令分隔符(类似于分号;
),但表示该命令将在后台运行。
如果命令以控制操作符 & 结束,则 shell 会在子 shell 中在后台执行该命令。shell 不会等待命令完成,返回状态为 0。以 ; 分隔的命令按顺序执行;shell 会依次等待每个命令终止。返回状态是最后执行的命令的退出状态
因此你运行了三个命令:
open -a safari "http://endic.naver.com/search.nhn?sLn=en
在背景中searchOption=all
在背景中query=good
在前景中
后两个只是变量赋值,因此没有显示错误(当意外发生这种情况时通常会出现这种情况)。
尽管 URL 中的 “&” 符号后面没有空格。
&
这对于或;
结束命令都不是必需的:
$ ls;pwd
Applications Desktop Documents Downloads Library Movies Music
Pictures Projects Public Work
/Users/danielbeck