存在するbash
:
$ type :
: is a shell builtin
$ type true
true is a shell builtin
同じように見えますが、同じシステムトレースを提供しません。
$ strace :
strace: :: command not found
$ strace true
execve("/bin/true", ["true"], [/* 82 vars */]) = 0
[snip]
exit_group(0) = ?
strace bash -c : 2>:.txt
比較しようとしましたが、strace bash -c true 2>true.txt
メモリの場所以外の違いは見つかりませんでした。
存在するdash
:
$ type :
: is a special shell builtin
$ type true
true is a shell builtin
さて、だから彼らは同じではありません。help :
とhelp true
あまり役に立ちませんし、bash
と同じ値を返しますdash
。 3バイトを節約し、スクリプトを読みにくくすることに加えて、:
実質的な違いはありますか?
ベストアンサー1
行動に実質的な違いはありません。どちらのコマンドも何も実行せず、成功状態で終了します。 :
何もしないことを強調し、true
成功の状態を強調しなさい。
strace true
true
これはシェルの組み込みおよび外部コマンド(/bin/true
)なので機能します。:
ただシェル組み込み(何もありません/bin/:
- あるかもしれませんし、おそらく非常に古いUnixシステムにあるかもしれません)。 Bashで試してみてください
type -a :
type -a true
どちらも存在する理由は歴史的です。私の記憶が正しい場合、一部の初期シェルにはコメント構文がなかったため、:
何もしないコマンドが使用されました。
内部的に若干の違いがありますdash
。ソースコード(git://git.kernel.org/pub/scm/utils/dash/dash.gitで利用可能)を見ると、いくつかの異なるコードパスが表示されますが、テキストとはeval.c
大きく異なる動作を生成することはできません。special
出力type :
。