为什么bash函数的结果取决于调用函数的范围?

时间:2018-02-06 09:23:45

标签: bash function loops

我的一个bash脚本出了问题。 我有一个变量和一个函数定义,非常简单:

RESULT='{"single":[],"theme":[],"imagesheet":[]}'

addResult() {
    type=$1
    filename=$2

    OP=".${type} += [\"${filename}\"]"
    RESULT=$(echo $RESULT | jq "$OP")
}

我调用此addResult函数并检查$RESULT变量,我可以看到它已更改,并且json增长。

但是,我也从循环中调用此函数:

grep -Rh "\.Image(\"" $MY_DIR | while read LINE; do

    addResult single "${LINE}"

done

当我从循环内部检查变量时,我可以看到条目被添加到json中。但是,在循环结束后,$RESULT变量会立即丢失在循环内添加的所有条目。我该怎么做才能在循环中进行更改?

编辑: 感谢@marcolz我已将我的电话修改为:

RESULT=$(grep -Rh "\.Image(\"" $MY_DIR | while read LINE; do check_imagesheets $LINE; done; echo $RESULT)

不幸的是,check_imagesheets函数非常大,并且还包含一些echo个调用,这些调用会污染最终的echo $RESULT。我可以采取哪些其他方法来缓解这个问题?

1 个答案:

答案 0 :(得分:1)

链接可能重复的答案指向:the Bash FAQ

在您的情况下,您可以使用命名管道或shopt -s lastpipe可能适合您。