bash にも typeset というコマンドはあるが、一部動作が違うものがあるようだ。ksh とは異なり、グローバル変数をそのまま使ってしまうので、ksh スクリプトを bash で実行すると動作が変わってしまう事があるので注意が必要。Linux の sh や ksh は実態が bash だったりすることが多いので更に注意。
簡単な実証コード。
% cat var.sh
set_var()
{
typeset -t var
var=local
echo "var = $var"
}
typeset var=global
echo "var = $var"
set_var
echo "var = $var"
ローカル変数として扱われていた場合の出力がこちら。
% ksh var.sh
var = global
var = local
var = global
グローバル変数として使われていたら以下のような出力になる。
var = global
var = local
var = local
手元で、更に追加実験をしていたら bash でもしっかりとローカル変数として扱っていたのも見付けた。bash のバージョンにも依るのかも知れない。
セコメントをする