Chinaunix首页 | 论坛 | 博客
  • 博客访问: 317067
  • 博文数量: 122
  • 博客积分: 1395
  • 博客等级: 中尉
  • 技术积分: 1340
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-03 20:40
个人简介

智者,既能奋发不休,又能尽人事,顺天命

文章分类

全部博文(122)

文章存档

2014年(39)

2013年(46)

2012年(12)

2011年(3)

2010年(20)

2009年(2)

我的朋友

分类: LINUX

2012-01-16 13:12:28

在《UNIX SHELL范例精解》中,关于命令行解析顺序是这么说的:
1,执行历史命令替代
2,命令行分解成词
3,更新历史命令
4,引用的处理
5,别名替代和函数的定义
6,设置重定向,后台进程和管道
7,执行变量替换(如$name、$user等)
8,执行命令替换(如`date`代替Today)
9,执行文件名替换(如cat abc.??,rm *.c等)
10,执行命令

但是网上有个博文《shell命令解析中扩展与重定向顺序问题》http://blog.csdn.net/sosodream/article/details/6197171,提出这么一个例子
  1. [root@rac0 ~]# echo $((12+34.0)) >/dev/null 2>&1
  2. -bash: 12+34.0: syntax error: invalid arithmetic operator (error token is ".0")
既算术扩展在重定向之前被解析。

查了一下man,关于扩展的解析顺序是
  1. The order of expansions is: brace expansion, tilde expansion, parameter, vari-
  2. able and arithmetic expansion and command substitution (done in a left-to-right
  3. fashion), word splitting, and pathname expansion.
可以看出,这些扩展基本上都在分解词之前被执行。注意其中有“command substitution”一项,把上面的例子改一下
  1. [root@localhost ]# `echo $((12+34.0))` &> /dev/null
  2. bash: 12+34.0: syntax error: invalid arithmetic operator (error token is ".0")
可以看出命令替换也在重定向之前。以此推论,变量替换也属于分解词阶段,也在重定向之前。
阅读(1163) | 评论(0) | 转发(0) |
0

上一篇:ifup获取的IP不正确

下一篇:RHEL第三方源

给主人留下些什么吧!~~