如何让变量的展开推迟

  其实作为刚学shell的菜鸟,我不知道这个题目总结得对不对。但是就实践来说,的确是没有问题的。


  我最近在写的一个脚本是在ClearCase的VOB里去查找一些element。如果要查找VOB里的文件,就需要有view。在脚本里,如果setview,就会fork一个子进程。为了避免这个,ClearCase提供了一个命令:cleartool setview -exec "command" [view_tag]。


  我当时是要在上面的command里从一个文件读入element,然后执行相应的操作。一开始是这样写的


func1()

{

  cleartool setview -exec "while read line;do cleartool desc -l $line;fi;done << $1" view_tag

}

func1 element_list


执行中发现,当调用func1的时候,$line并没有按照预想的取得element_list里相应的每一行的内容,而是空的。


修改之后,能正确执行的脚本如下:


func1()

{

  cleartool setview -exec "while read line;do cleartool desc -l \$line;fi;done << $1" view_tag  #就是在$line前加了一个转义的\

}

func1 element_list


究其原因,大概是因为shell是解释性的语言,它在执行语句前,会先把变量进行扩展。但是因为$line要在while循环中才能赋值,所以如果不转义$line,就只能得到一个空值。当转义之后,就是告诉shell,这个变量的值要到while循环才扩展。


暂时我还没有在ABS文档找到相应的解释。如果某天看到了,再来更新这里。


感谢Ace_fei和Chris_li两位大侠的指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值