>>540
単に$aだと、shellを介さずに$aを実行となってしまうので、ls;lsを実行しようするが、そんなコマンドは無い。
sh -c $aとすれば、shellを介して$aを実行するので、lsの後のセミコロンで区切ってくれる。
コマンドラインでコマンドを打つ時は自動的にshellを介してコマンドが実行されるのでshellを介して実行してるという意識があまりないけど、lsというコマンドを打つという事はsh -c lsであると考えれば納得いくかも。
後、最近は/bin/shはbashへのシンボリックシンクなので、区別して書いてないです。