>我在下面定义了一个函数。每次它通过数组运行时,我希望它更新一个现有的变量(${1}_FLAG}
)。没有按照我的预期工作。基本上,如果存在该包的新版本,请将标志设置为 true,以便我可以调用另一个函数。
删除了"额外"变量,因为人们被它们所吸引。我需要的是更新HTTP_FLAG
PHP_FLAG
和MOD_QOS
变量,当它们被循环时。
HTTP_FLAG=false
PHP_FLAG=false
MOD_QOS=false
PKGS=(HTTP PHP MOD_QOS);
check_new_version() {
# If a new version is available, download the source file
if [ ${!check_version} != ${!current_version} ]
then
...
...
${1}_FLAG=true
fi
}
for i in "${PKGS[@]}"
do
check_new_version $i
done
if ${HTTP_FLAG}; then
...
...
fi
我认为你需要eval
:
$ set -- FOO
$ FOO_FLAG=false
$ eval ${1}_FLAG=true
$ echo $FOO_FLAG
true
$
在bash
中,您想使用 ${!var}
表示法,但我没有设法找到可行的直接调用。 这通过var
变量接近,但并不完全存在:
$ var=${1}_FLAG
$ FOO_FLAG=false
$ ${!var}=true
bash: false=true: command not found
$ : ${!var}=true
$ echo $FOO_FLAG
false
$
bash 具有间接参数扩展功能,因此您可以执行以下操作:
varname=${1}_LINK
value=${!varname}
例
$ foo_LINK="hello world"
$ set -- foo
$ varname=${1}_LINK
$ echo ${!varname}
hello world