BASH:只有当该函数通过管道传输时,全局变量才能在函数中更新(简单示例)

Dav*_*rks 17 linux variables bash cat

这有点臭虫,但可能有人可以解释它:

以下脚本不起作用,输出如下:

#!/bin/bash
GLOBAL_VAR="OLD"
myfunc() {
        echo "func before set> $GLOBAL_VAR"
        GLOBAL_VAR="NEW"
        echo "func after set> $GLOBAL_VAR"
}
myfunc | cat
echo "final value> $GLOBAL_VAR"
Run Code Online (Sandbox Code Playgroud)

输出:

func before set> OLD
func after set> NEW
final value> OLD
Run Code Online (Sandbox Code Playgroud)

现在,只需脱掉| cat它就行了!

#!/bin/bash
GLOBAL_VAR="OLD"
myfunc() {
        echo "func before set> $GLOBAL_VAR"
        GLOBAL_VAR="NEW"
        echo "func after set> $GLOBAL_VAR"
}
myfunc
echo "final value> $GLOBAL_VAR"
Run Code Online (Sandbox Code Playgroud)

输出:

func before set> OLD
func after set> NEW
final value> NEW
Run Code Online (Sandbox Code Playgroud)