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

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

文章分类

全部博文(122)

文章存档

2014年(39)

2013年(46)

2012年(12)

2011年(3)

2010年(20)

2009年(2)

我的朋友

分类: LINUX

2010-06-01 09:52:27

《UNIX shell范例精解》中提到shell会将命令串读两遍,第一遍是设置trap时读一遍、第二遍是信号到达时读一遍。因此当使用双引号时,变量展开和命令替换会在第一遍读取发生,而使用单引号则会在第二遍读取时发生。  


#!/bin/bash

function ss(){
    echo hello
}

function tt(){
    trap '$(echo ss)' 2
}

tt

while :
do
    sleep 30
done


跟踪这个脚本,当使用双引号时,调用tt后,设置命令就变为


trap ss 2


以后当信号到达时,直接执行ss。

当使用单引号,调用tt后,设置命令依然是


trap '$(echo ss)' 2


以后当信号到达时,先执行


echo ss


然后在执行ss。

也就是说,当使用单引号之后,每次信号到达都会重复执行变量展开和命令替换。

阅读(609) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~