linux – “printf -v”内部函数无法使用重定向输出
发布时间:2020-12-14 02:21:44 所属栏目:Linux 来源:网络整理
导读:使用bash 4.1.2和4.3.48,以下脚本给出了预期的输出: #!/bin/bashreturnSimple() { local __resultvar=$1 printf -v "$__resultvar" '%s' "ERROR" echo "Hello World"}returnSimple theResultecho ${theResult}echo Done. 按预期输出: $./returnSimpleHello
使用bash 4.1.2和4.3.48,以下脚本给出了预期的输出:
#!/bin/bash returnSimple() { local __resultvar=$1 printf -v "$__resultvar" '%s' "ERROR" echo "Hello World" } returnSimple theResult echo ${theResult} echo Done. 按预期输出: $./returnSimple Hello World ERROR Done. 但是,当函数的stdout通过管道传递给另一个进程时,__ resultvar变量的赋值不再起作用: #!/bin/bash returnSimple() { local __resultvar=$1 printf -v "$__resultvar" '%s' "ERROR" echo "Hello World" } returnSimple theResult | cat echo ${theResult} echo Done. 意外输出: $./returnSimple Hello World Done. 为什么printf -v在第二种情况下不起作用? printf -v是否应该将值写入结果变量,而不管函数的输出是否通过管道传递到另一个进程? 解决方法
请参阅man bash,有关管道的部分:
这就是你写cmd时的原因cat,cmd接收无法修改的变量副本. 一个简单的演示: $test() ((a++)) $echo $a $test $echo $a 1 $test | cat $echo $a 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |