Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック第2章2節練習問題その2

練習2.2.c ビルトインコマンドと外部コマンドを意識する

外部コマンドとしての echo とビルトインコマンドとしての echo をそれぞれ1000回実行した時間を比較する問題だった。実験してみるとビルトインコマンドのほうが圧倒的に速かった。

外部コマンド:3.306s

ビルトインコマンド:0.013s

であった。

ちなみに外部コマンドとは実体としてのファイルが存在するコマンドのことで、ビルトインコマンドは実体としてのファイルが存在しないコマンドである。一般にビルトインコマンドのほうが動作が速いという利点がある。加えて、ビルトインコマンドはシェルが動くなら必ず使えるという利点もある。

which や type といったコマンドで外部コマンドかビルトインコマンドかを見分けられる。

 

練習2.2.d サブシェルを使う

あるディレクトリに行って何か操作して戻るという作業を考える。これをサブシェルを使わずにやると cd を2回使うが、サブシェルを使うと1回で済む理由を考える問題だった。

cd をサブシェル内で行えばメインのシェルのほうではディレクトリの移動が行われないので、移動が一回だけで済むと答えたが、解答例はもう少しシンプルで、サブシェルが端末で動いている Bash とは別のプロセスとして動くからとなっていた。