>>956
サブシェルは関係ない。俺もちゃんと仕様読んだわけじゃないけど、
aliasは実行時じゃなくて、1単位ごとに → パース → 実行 の
パース時に変換してる感じ

そして1単位というのは、

alias FLAG=true
alias FLAG=false; FLAG && echo true
↑これは一行で一単位、だからtrueと表示されてしまうし

関数とか、プロンプトから、func() { 改行 とかやると
} 改行 するまで、ずっと行頭に > って表示されるだろ?

あれが1単位。だから↓みたいなものもtrueって表示されてしまうんだよ

alias FLAG=true
func() {
alias FLAG=false
if FLAG; then
echo true
fi
}
func