Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中将变量值转换为新变量_Bash_Shell - Fatal编程技术网

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

在bash中将变量值转换为新变量,bash,shell,Bash,Shell,我有一个定义如下的函数。每次它在数组中运行时,我都希望它更新一个现有变量(${1}\u FLAG})。没有按我想的那样工作。基本上,如果存在所述包的新版本,请将标志设置为true,以便调用另一个函数 删除了“额外”变量,因为人们被这些变量吸引住了。我需要的是在循环时更新HTTP\u标志PHP\u标志和MOD\u QOS变量 HTTP_FLAG=false PHP_FLAG=false MOD_QOS=false PKGS=(HTTP PHP MOD_QOS); check_new_versi

我有一个定义如下的函数。每次它在数组中运行时,我都希望它更新一个现有变量(
${1}\u FLAG}
)。没有按我想的那样工作。基本上,如果存在所述包的新版本,请将标志设置为true,以便调用另一个函数

删除了“额外”变量,因为人们被这些变量吸引住了。我需要的是在循环时更新
HTTP\u标志
PHP\u标志
MOD\u 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
$ 

我想您需要
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
bash有,因此您可以执行以下操作:

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

$ foo_LINK="hello world"
$ set -- foo
$ varname=${1}_LINK
$ echo ${!varname}
hello world

你在哪里设置
HTTP\u-VER
HTTP\u-CURRENT
HTTP\u-LINK
,等等?上面的脚本相当长,我认为它们不相关。例如
HTTP\u LINK=”http://apache.ziply.com/httpd/${HTTP\u VER}“
请编辑您的问题,包括演示“未按预期工作”,以及所需输出与当前输出。或者使用
set-vx和set+vx
打开/关闭shell调试跟踪,以查看每个cmd/块如何使用变量替换进行处理。祝你好运。你在哪里设置
HTTP\u-VER
HTTP\u-CURRENT
HTTP\u-LINK
,等等。上面的脚本相当长,我认为它们不相关。例如
HTTP\u LINK=”http://apache.ziply.com/httpd/${HTTP\u VER}“
请编辑您的问题,包括演示“未按预期工作”,以及所需输出与当前输出。或者使用
set-vx和set+vx
打开/关闭shell调试跟踪,以查看每个cmd/块如何使用变量替换进行处理。祝你好运。这正是我面临的问题。我通过使用
export“${1}\u FLAG”=true解决了这个问题。这正是我面临的问题。我通过使用
export“${1}\u FLAG”=true解决了这个问题