gpt4 book ai didi

linux - "printf -v"内部函数不适用于重定向输出

转载 作者:IT王子 更新时间:2023-10-29 00:19:27 26 4
gpt4 key购买 nike

对于 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.

但是,当函数的标准输出通过管道传输到另一个进程时,__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管道部分:

Each command in a pipeline is executed as a separate process (i.e., in a subshell).

这就是为什么当你写 cmd | catcmd 收到它无法修改的变量副本。

一个简单的演示:

$ test() ((a++))
$ echo $a

$ test
$ echo $a
1
$ test | cat
$ echo $a
1

关于linux - "printf -v"内部函数不适用于重定向输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com