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