Shell使用输出重定向时发现的问题总结

在调用函数时,如果使用tee做输出重定向,会造成在函数内对全局变量的修改,出函数之后失效。

不使用tee做输出重定向的代码:

#!/bin/bash
declare -i NUM=100;
function updateNum(){
  echo "updateNUm: before update 'NUM'=$NUM"
  NUM=300;
  echo "updateNUm: after update 'NUM'=$NUM"
}

echo "调用函数之前,NUM=$NUM";
updateNum 2>&1 >> /home/shangsong/temp/test1.log;
echo "调用函数之后,NUM=$NUM";

执行“bash -x test1.sh”

+ declare -i NUM=100
+ echo 调用函数之前,NUM=100
调用函数之前,NUM=100
+ updateNum
+ echo 'updateNUm: before update '\''NUM'\''=100'
+ NUM=300
+ echo 'updateNUm: after update '\''NUM'\''=300'
+ echo 调用函数之后,NUM=300
调用函数之后,NUM=300

使用tee做输出重定向之后的代码:

#!/bin/bash
declare -i NUM=100;
function updateNum(){
  echo "updateNUm: before update 'NUM'=$NUM"
  NUM=300;
  echo "updateNUm: after update 'NUM'=$NUM"
}

echo "调用函数之前,NUM=$NUM";
updateNum 2>&1 | tee /home/temp/test1.log;
echo "调用函数之后,NUM=$NUM";

执行“bash -x test1.sh”

+ declare -i NUM=100
+ echo 调用函数之前,NUM=100
调用函数之前,NUM=100
+ updateNum
+ tee /home/shangsong/temp/test1.log
+ echo 'updateNUm: before update '\''NUM'\''=100'
updateNUm: before update 'NUM'=100
+ NUM=300
+ echo 'updateNUm: after update '\''NUM'\''=300'
updateNUm: after update 'NUM'=300
+ echo 调用函数之后,NUM=100
调用函数之后,NUM=100

结论

在调用函数时,如果使用tee做输出重定向,会造成在函数内对全局变量的修改,出函数之后失效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容