来自函数的可变影响不适用于$()

时间:2014-12-18 16:25:00

标签: bash

我正在尝试定义一个函数,该函数在第一次被调用时会要求用户做出一些选择,然后记住选择,以便不再询问用户。

使用变量来存储状态(初始化或未初始化)在正常方式调用函数时效果很好,但是如果我希望此函数返回结果,则使用$()捕获结果会破坏我的行为我试图实现

这是一个简单的可再现的例子:

#!/bin/bash
initialized=false
function givevalue
{
    echo "init = $initialized" 1>&2
    if ! $initialized;
    then
        echo "a b c"
        initialized=true
    else
        echo "d e f"
    fi
}
for i in $(givevalue); do echo "run 1 : $i"; done
for i in $(givevalue); do echo "run 2 : $i"; done

我得到的结果是

init = false
run 1 : a
run 1 : b
run 1 : c
init = false
run 2 : a
run 2 : b
run 2 : c

虽然我在期待

init = false
run 1 : a
run 1 : b
run 1 : c
init = true
run 2 : d
run 2 : e
run 2 : f

1 个答案:

答案 0 :(得分:3)

$(...)的内容作为单独的进程运行,对变量的更改不会传播到父shell。这不能改变。