1

我在下面定义了一个函数。每次遍历数组时,我都希望它更新现有变量 ( ${1}_FLAG})。没有按我的预期工作。基本上,如果存在所述包的新版本,请将标志设置为 true,以便我可以调用另一个函数。

删除了“额外”变量,因为人们对它们很感兴趣。我需要的是在循环时更新HTTP_FLAG PHP_FLAGand变量。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
4

2 回答 2

1

我认为你需要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
$ 
于 2012-11-19T17:46:35.520 回答
0

bash 有间接参数扩展,所以你可以这样做:

varname=${1}_LINK
value=${!varname}

例子

$ foo_LINK="hello world"
$ set -- foo
$ varname=${1}_LINK
$ echo ${!varname}
hello world
于 2012-11-19T22:34:32.780 回答