新しいシェルを実行しても$ SHELLが変更されないのはなぜですか?

新しいシェルを実行しても$ SHELLが変更されないのはなぜですか?
 $ echo $SHELL
/bin/bash
 $ /bin/ksh93
 $ echo $SHELL
/bin/bash
 $ file /bin/ksh93
/bin/ksh93: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped

 $ getent passwd test111
test111:x:1008:1008:,,,:/tmp:/bin/ksh93
 $ ssh test@localhost
test@localhost's password:
 $ echo $SHELL
/bin/ksh93
 $ bash
 $ echo $SHELL
/bin/ksh93

$SHELL他のシェルを実行した後に変更されることを願っています。なぜできないの?

PS ただし、シェルは変更されますが、$SHELL 変数だけは変更されません。

 $ dash
 $ echo $SHELL
/bin/bash
 $ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found

ベストアンサー1

この変数が変更されると予想してはいけません。現在実行中のシェルではなく、パスワードデータベースに格納されているパスであるプライマリシェルへのパスを保存するために使用されます。

おすすめ記事