在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解决了这个问题