ksh の typeset は bash とは互換が無いので注意 ― 2019年08月15日 12時06分23秒
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
手元で、更に追加実験をしていたら bash でもしっかりとローカル変数として扱っていたのも見付けた。bash のバージョンにも依るのかも知れない。
var = global
var = local
var = local
最近のコメント