これ、すごく単純なことだけどうっかりしていたので。
テストコード
こんな感じのコードでした。
@test "For Qiita!!" {
declare -A hash=()
cat <<EOF > $tmp
B=245
G=2
EOF
run File::SetToArray $tmp hash
echo "hash: $(declare -p hash)" >&3
[ "${hash[B]}" = "245" ]
[ "${hash[G]}" = "2" ]
}
簡略化していますが、File::SetToHash
でファイルの中身を仮想配列にしまう処理をしています。
(ファイルからkey=value
として読み取り、それぞれキーをkey
に、値をvalue
にして格納しています)
実行結果
ダメでした
hash: declare -A hash=()
not ok 4 For Qiita!!
# (in test file tests/libdraw.bats, line 57)
# `[ "${hash[B]}" = "245" ]' failed with status 127
hash
に値が追加されることを期待していたのですが、入らなかった
解決方法: run
コマンドを外す
どうやら、File::SetToArray
の呼び出しにrun
コマンドを使っていたのがよくなかった模様です。
詳しい理由は調べてませんが、おそらく別プロセスで動かしているとかそういうことなのではないかなと思っています。
多分、別プロセスというよりかサブシェルなのかな...?(サブシェル内の結果は親に継承されないため)