在读取循环时使用变量

the*_*eta 3 variables bash

在我的bash脚本中,我使用while read循环和辅助函数fv():

fv() {
    case "$1" in
    out) echo $VAR
    ;;
    *  ) VAR="$VAR $1"
    ;; 
    esac
}

cat "$1" | while read line
    do
        ...some processings...
        fv some-str-value
    done

echo "`fv out`"
Run Code Online (Sandbox Code Playgroud)

希望我可以在while read循环中从循环中提取值,并在脚本的其余部分中访问.但上面的片段并不好,因为我没有输出.

有没有简单的方法来解决这个问题 - 在这个循环中输出一个可以在脚本的其余部分访问的变量中输出字符串 - 而无需重新格式化我的脚本?

Kev*_*vin 5

由于没有人向你解释为什么你的代码不起作用,我会的.

在使用时cat "$1" |,您将在子shell中执行该循环.该VAR子shell中使用的变量作为VAR主脚本的副本启动,对它的任何更改仅限于该副本(子shell的范围),它们不会影响脚本的原始VAR.通过删除无用的cat,你删除了管道,所以循环在主shell中执行,因此它可以(并且确实)改变正确的副本VAR.