7月 262019
 

场景:

想执行一个命令,如果命令成功,则不输出任何信息,如果命令失败,输出错误信息;

 

通常来讲,特别简单:

就行; 但是,如果 $cmd 会通过标准错误输出一些debug信息呢?这样的话,即使命令成功也会看到一些不必要的信息,那么如何改进呢?

基本思路就是,把标准输出扔掉(可选),标准错误重定向到标准输出,然后赋值给一个变量:

这个没有问题;

但是,当我们试图把这个逻辑写到函数中时,似乎就不太对了,因为函数中的变量尽量local声明,而且,声明和赋值写在一起显得紧凑、美观、有修养;如下:

这是,和我们预期不一样了 ; $? 已经不是no_such_cmd 的返回值了,为什么?

参看下面截图:

显然,第一个函数中 $? 其实是local语句的返回值了(local的返回值和变量被赋了什么值没有关系,参看: help local),所以,正确的姿势是,先声明变量,再使用

 Posted by at 下午 2:16

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

(required)

(required)

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据