【发布时间】:2019-08-12 08:31:21
【问题描述】:
一般来说,当函数正在编辑全局变量时,如何回显函数的输出?这里的最佳做法是什么?
我尝试在子shell 中调用该函数作为echo 的参数。但是没有为父环境编辑全局变量。
declare -a ARR
f () {
ARR+=("$1")
echo "added $1"
}
echo $(f a)
f b
f c
echo "${ARR[@]}"
我期望输出:
added a
added b
added c
a b c
但我得到了
added a
added b
added c
b c
【问题讨论】:
-
echo $(f a)更改子 shell 中的数组变量,而该更改在父 shell 中不可用。 -
subshell as an argument to echo. But then the global variable is not edited- 这正是 subshell 的工作原理。 -
不要使用全局变量。可能是
g() { printf "%s " "$1" >> g.all; echo "added $1"; }之类的东西,完成后检查g.all。
标签: bash