0

bashの代替値展開( ${var+alt})で、ある変数の値を別の変数の名前として使用するにはどうすればよいですか?

私はそう思うだろう

#!/bin/bash
cat='dog'
varname='cat'
if [ -z ${`echo "${varname}"`+x} ]; then
    echo 'is null'
fi

とほぼ同等である必要があります

#!/bin/bash
if [ -z ${dog+x} ]; then
    echo 'is null'
fi

しかし、これをやろうとすると、

${`echo "${cat}"`+x}: bad substitution

問題の一部は、コマンド置換を行うサブシェルが$varnameもう知らないことだと思いますか? その変数をエクスポートする必要がありますか?

これを行う理由は、変数が null であるかどうかを確認する方法をこの回答から学び、次のように という関数でそのチェックをカプセル化しようとしているからですis_null

function is_null {
    if [ $# != 1 ]; then
        echo "Error: is_null takes one argument"
        exit
    fi
    # note: ${1+x} will be null if $1 is null, but "x" if $1 is not null
    if [ -z ${`echo "${1}"`+x} ]; then
        return 0
    else
        return 1
    fi
}

if is_null 'some_flag'; then
    echo 'Missing some_flag'
    echo $usage
    exit
fi
4

1 に答える 1

-1

あなたの問題を理解しているかどうかわかりません。

私が得た場合、必要なのはevalコマンドです。

$ cat='dog'

$ varname='cat'

$ echo ${varname}

cat

$ eval echo \$${varname}

dog
于 2015-04-11T20:04:36.447 に答える