LinuxSir.cn,穿越时空的Linuxsir!

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

&&和()共同使用的疑问

[复制链接]
发表于 2008-12-30 10:55:59 | 显示全部楼层 |阅读模式
在终端中输入ls && echo "hello" ; rm file
在只使用了命令分隔符没有输“()”的情况下,不是应该只执行最后一条指令rm file吗?为什么我输了之后echo "hello"和rm file都执行了啊?
请各位指教,谢谢!
发表于 2008-12-30 11:04:55 | 显示全部楼层
Post by rainfly;1931716
不是应该只执行最后一条指令rm file吗?

为什么?
应该是两个都执行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-30 11:34:20 | 显示全部楼层
我看《LINUX与UNIX SHELL编程指南》 6.3   用()和{ }将命令结合在一起
里面是这样讲的,但是我试了,发现不是。所以有此问^_^
回复 支持 反对

使用道具 举报

发表于 2008-12-30 13:37:12 | 显示全部楼层
你应当把教材中的原话和例子程序贴出来,我不太相信有什么教材能犯如此低级的错误。所以也许只是你理解错了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-30 14:17:25 | 显示全部楼层
好吧
我把原话截下来。
附件里
最后一句话

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2008-12-30 15:35:08 | 显示全部楼层
其实真的原因在于后面部分的命令并没有被组合起来,你把教程中“|”换为“&&”就应该会执行,书中也应该是这个意思吧!
回复 支持 反对

使用道具 举报

发表于 2008-12-31 10:20:51 | 显示全部楼层
Post by rainfly;1931798
好吧
我把原话截下来。
附件里
最后一句话


原文中用的是 cmd1 || cmd2; cmd3
而你的是 cmd1 && cmd2; cmd3
二者的区别可大了。

题外话,没看过这本书,不过单从你附的这页来看,这本书写的不怎样。熟手觉得没有深度,新手又看不懂。
建议你找本专门讲shell 编程的书,最好是英文的,或英文翻译的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-31 10:33:55 | 显示全部楼层
不是的
即使我执行 ca || echo "hello"; echo "ok"
ca不存在,我是故意让||前的命令执行失败的,
但是||后的语句还是都执行了!还是会输出
ca: command not found
hello
ok

————————
可见 echo "hello"; echo "ok" 都执行了,而不像书中所说只执行最后一句!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-31 10:41:16 | 显示全部楼层
Post by biinn;1932088
原文中用的是 cmd1 || cmd2; cmd3
而你的是 cmd1 && cmd2; cmd3
二者的区别可大了。

题外话,没看过这本书,不过单从你附的这页来看,这本书写的不怎样。熟手觉得没有深度,新手又看不懂。
建议你找本专门讲shell 编程的书,最好是英文的,或英文翻译的。



另外,这本《linux 与 unix shell 编程指南》就是国外的书翻译过来的哦。。。
我也是听说适合入门才看的。
能不能请你推荐一本英文shell的书呢?
回复 支持 反对

使用道具 举报

发表于 2008-12-31 10:43:21 | 显示全部楼层
什么书...好乱 根本看不明白...会误导人的
用";"只是把命令组合在一起 然后按顺序运行

在"()"中的命令是在subshell中运行
在"{}"中的是在当前shell运行(注意要在最后的命令后面加上";" 这书没说)
这都没错 可是后面的命令有点乱
按理"()"中的命令是在subshell运行 那么最后的exit就多余了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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