在 bash 中将变量值转换为新变量



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

删除了"额外"变量,因为人们被它们所吸引。我需要的是更新HTTP_FLAG PHP_FLAGMOD_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

相关内容

  • 没有找到相关文章

最新更新