1

以下に定義された関数があります。配列を実行するたびに、既存の変数 ( ${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
4

2 に答える 2

1

I think you need eval:

$ set -- FOO
$ FOO_FLAG=false
$ eval ${1}_FLAG=true
$ echo $FOO_FLAG
true
$

In bash, you'd like to use the ${!var} notation, but I didn't manage to find the direct invocation that would work. This gets close via the var variable, but not quite there:

$ 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 に答える