ksh や bash の [ と [[ の違い2021年05月26日 12時47分37秒

ksh や bash で条件式の評価に一つだけの [ と二重の [[ を見ることがある。

実はこの二つは大違い。[[ は内部コマンドで [ は外部コマンド。

% which [
/bin/[

まず、簡単な違い。これは、実行速度になる。新しいプロセスを生成しなくて良くなるので、[[ の方が速い。

二つ目は、引数の処理の仕方。外部コマンドだと、条件式が評価されてから、外部コマンドに渡される。内部コマンドだと、そのまま全て自己処理をする。一番の大きな違いはスペースや特殊文字の処理の結果だろう。 外部コマンドとして処理する場合は、しっかりと二重符で囲って、空白も一つの引数の一部として渡されるようにしっかりと注意をしなければいけない。

if [ -f "$file" ]
if [ -f "${file}" ]
それに引き替え、内部コマンド式だと、空白も含めて一つの引数として処理されるので二重符は無くてもかまわない。
if [[ -f $file ]]
二重符が減るので、若干目の負担が減る。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2021/05/26/9381451/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。