bash 4.3以降、それはもはやそれほど簡単ではありません。
「declare-n」を使用すると、別の変数への参照を追加でき、これを何度も繰り返すことができます。これが十分に複雑ではないかのように、「declare -p」を使用すると、型または元の変数を取得できません。
例:
$ declare -a test=( a b c d e)
$ declare -n mytest=test
$ declare -n newtest=mytest
$ declare -p newtest
declare -n newtest="mytest"
$ declare -p mytest
declare -n mytest="test"
したがって、すべての参照をループする必要があります。bashでは-これだけが次のようになります:
vartype() {
local var=$( declare -p $1 )
local reg='^declare -n [^=]+=\"([^\"]+)\"$'
while [[ $var =~ $reg ]]; do
var=$( declare -p ${BASH_REMATCH[1]} )
done
case "${var#declare -}" in
a*)
echo "ARRAY"
;;
A*)
echo "HASH"
;;
i*)
echo "INT"
;;
x*)
echo "EXPORT"
;;
*)
echo "OTHER"
;;
esac
}
上記の例では:
$ vartype newtest
ARRAY
配列を確認するには、コードを変更するか、grepで使用します。
vartype $varname | grep -q "ARRAY"