LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
123
返回列表 发新帖
楼主: rainfly

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

[复制链接]
 楼主| 发表于 2008-12-31 12:27:13 | 显示全部楼层
Post by Jockey;1932117
第一个不完善,第二个不对。
看起来,你并没有接受过正统的程序设计训练,不过没关系,建议搜索网络:“短路求值”。

recipe in POSIX shell:&& || ; 都是从左到右的执行顺序连接[color="Red"]命令或者命令组,不过...
  • &&总是找到一个执行失败的命令才罢休;
  • ||总是找到一个执行成功的命令才罢休;
  • ;小朋友从不计较这些。

理解了短路求值,分组不分组完全是次要问题。


谢谢斑斑
&& 和 || 学C的时候知道它们特性,&& 前面表达式求值是1才有必要运算后面的表达式,否则整个表达式值为0,|| 前面表达式求值为0才有必要运算后面的表达式,否则整个表达式值为1。
我就是不明白分组()和{}的作用。有括号和没括号,里面的几个表达式到底执行有没区别
回复 支持 反对

使用道具 举报

发表于 2008-12-31 12:57:54 | 显示全部楼层
{} 的作用是将一组指令看成一条指令,这点跟C语言中"类似",if{}, for(){}, while{}...

举个例子,一个脚本接受一个命令行参数,脚本的开始判断这个参数是否是个目录, 如果不是,打印错误信息,然后退出。通常可以写成:

  1. if [ -z "$1" -o ! -d "$1" ]; then
  2.     echo "usage: $0 <dirname>"
  3.     exit 1
  4. fi
复制代码

不过我通常写成:

  1. [-n "$1" -a -d "$1" ] || { echo "usage: $0 <dirname>"; exit 1; }
复制代码


至于(),其中的指令会在另一个shell (子 shell)中运行,这样两个 shell 的环境变量,全局变量互不影响。随着你水平的提高,你会明白的。

这只是我的实践心得,版大学风严谨,不对的地方请指正。
回复 支持 反对

使用道具 举报

发表于 2009-1-13 02:32:16 | 显示全部楼层
建议楼主直接看手册页。把你的那本书烧掉。里边()和{}的作用都讲反了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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