shell编程中trap使用单、双引号的区别(原创)

发表于:2007-06-08来源:作者:点击数: 标签:
今天在http://www.yesky.com/20011220/210803_5.shtml看到一篇介绍shell编程中使用trap的文章,对其中提到单、双引号的区别的说明开始一直没看懂,研究了半天才终于把它搞明白了。原文如下: 多数系统中共有15种发给进程的信号,默认情况下大多数信号都会使
  今天在http://www.yesky.com/20011220/210803_5.shtml看到一篇介绍shell编程中使用trap的文章,对其中提到单、双引号的区别的说明开始一直没看懂,研究了半天才终于把它搞明白了。原文如下:

  多数系统中共有15种发给进程的信号,默认情况下大多数信号都会使程序终止。用户最好查阅自己系统的文挡,看看本系统内使用的信号种类。除了信号为9(真正的kill信号)不能使用trap命令外,其他信号所带来的操作都可以用trap命令进行指定。下面是trap命令中经常使用的几种信号:     信号   功能           1     挂起      2    操作中断      15    软终止(kill信号)   若命令串中包含不只一条命令,必须使用引号将整个命令括起来,具体是单引号还是双引号,由用户是否需要变量替换决定。" "替换,' '不替换。   使用下面trap命令可以使程序在接收到挂起、中断或kill信号时,首先把临时文件删除,然后退出:     trap "rm $TEMPDIR/* $$;exit" 1 2 15   在上面例子中,当Shell读取trap命令时,首先对$TEMPDIR和$$进行变量替换,替换之后的命令串将被保存在trap表中,若上例中trap命令使用单引号时,trap命令执行时候,不进行变量替换,而把命令串 rm $TEMPDIR/* $$;exit 放到trap表中,当检测到信号时,程序解释执行trap表中的命令串,此时进行变量替换。前面变量$TEMPDIR和$$的值为执行trap指令时候的值,后一种情况中变量的值为程序接收到信号时候的值,所以 "、'一定要区分仔细。   下面命令的含义为用户按二次中断键后,程序才终止:     trap 'trap 2' 2   一般trap命令中的命令串中几乎都包含exit语句,上面rm的例子若无exit语句,接收到信号rm命令执行完后程序将挂起。但有时用户也需要程序在接到信号后挂起,例如当终端和系统断开后,用户发出挂起信号,并执行空命令,如下:     trap : 1   若用户想取消前trap指令设置的命令串,可以再执行trap命令,在命令中不指定命令串表示接收到信号后进行默认的操作,命令如下:     trap 1 绞尽脑汁才想出这么个脚本。运行一下,终于明白单、双引号的区别了,呵呵。 #!/bin/ksh aa=a1 bb=a2 trap "echo aa=$aa , bb=$bb" 0 #把这行换成trap 'echo aa = $aa , bb = $bb' 0再试试 aa=1 bb=2


 

原文转自:http://www.ltesting.net

...