我正在尝试定义一个函数,该函数在第一次被调用时会要求用户做出一些选择,然后记住选择,以便不再询问用户。
使用变量来存储状态(初始化或未初始化)在正常方式调用函数时效果很好,但是如果我希望此函数返回结果,则使用$()
捕获结果会破坏我的行为我试图实现
这是一个简单的可再现的例子:
#!/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
答案 0 :(得分:3)
$(...)
的内容作为单独的进程运行,对变量的更改不会传播到父shell。这不能改变。