LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1164|回复: 11

括号后&和&&有什么区别?

[复制链接]
发表于 2003-3-10 09:33:24 | 显示全部楼层 |阅读模式
有个例子
(gaim &) & exit和(gaim &) && exit两者执行的效果好象是一样的,一个&和两个有什么区别呢?
发表于 2003-3-10 10:01:48 | 显示全部楼层
看看c里面对&和&&这两个运算符的定义就清楚了。
 楼主| 发表于 2003-3-10 10:42:00 | 显示全部楼层
在c中,&&是与运算,&是位与,好象还可以连接字符,在shell中&是后台,&&是前后两个命令的承接,不好意思,还是不明白,能不能清楚点说?
发表于 2003-3-10 13:20:50 | 显示全部楼层

Re: 括号后&和&&有什么区别?

最初由 木各 发布
有个例子
(gaim &) & exit和(gaim &) && exit两者执行的效果好象是一样的,一个&和两个有什么区别呢?


我觉得在上面的例子里,括号外面的&就不是后台的意思了,而是按位与
 楼主| 发表于 2003-3-10 13:49:02 | 显示全部楼层
大概明白了,再比如这样gaim & exit执行结果同样和上面两个一样,这个应该是与运算的?而这个gaim & exit &执行后在终端上返回两个进程号,这两个终端号应该是后面一个&返回的吧?中间那个应该还是与的意思?
发表于 2003-3-11 16:40:46 | 显示全部楼层
在shell中,&跟在命令后面,表示将命令放在后台运行,并开启一个进程,如果&的两边有操作数,就表示两个操作数进行数学与运算,;&&是一个逻辑操作符,表示当两个操作数都为真时,要返回的值.在其他语言中的,我不太知道;)
 楼主| 发表于 2003-3-11 18:26:51 | 显示全部楼层
哦,那怎么判断一个正在执行的命令是不是正在后台运行呢?
发表于 2003-3-11 22:18:15 | 显示全部楼层
用jobs可以查看正在后台运行的命令呀.
 楼主| 发表于 2003-3-12 02:22:10 | 显示全部楼层
呵,忘的总比记的多:)
发表于 2003-3-12 12:05:41 | 显示全部楼层

(list) 在subshell中运行list,& 放入后台运行,&& 逻辑与

所以(gaim &) & exit会创建subshell,在里面运行gaim &,并立即返回,执行exit;
(gaim &) && exit则不会立即返回,而是等待subshell执行完毕,如果前面返回值为逻辑真,继续执行下面的exit命令。

exp && cmd这种用法其实是利用了逻辑表达式处理顺序,是简化的if语句,她等同于:
if exp; then cmd; fi
在exp和cmd都比较短小时,用if .. fi这样的写法很累赘,而且不如&&写法一目了然。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表