GNU Coreutils `\time --version`と `/bin/true --version`は動作しますが、 `\true --version`は動作しませんか?

GNU Coreutils `\time --version`と `/bin/true --version`は動作しますが、 `\true --version`は動作しませんか?
$ \time --version
time (GNU Time) UNKNOWN
Copyright (C) 2018 Free Software Foundation, Inc.
...

$ /bin/true --version
true (GNU coreutils) 8.32
Copyright (C) 2020 Free Software Foundation, Inc.
...

$ \true --version

$ echo 'nothing was printed on the previous line'

私はUbuntu 22.04、GNU bash、バージョン5.1.16(zsh 5.9でもテスト済み)を使用しています。

ベストアンサー1

大きな打撃を受けた状態でtimeキーワードです(参照type time\timeそう解釈されません。\timeあなたの場合は、Bashに外部の実行可能ファイルを実行させるGNU time

ただし、trueこれは組み込まれています(参考資料を参照type true)。バックスラッシュを使用してtimeキーワード(またはtryなどのキーワード)を抑制できるという事実は、\ifバックスラッシュを使用して組み込み関数を抑制できると誤解する可能性があります。いいえ、\trueGNU以外の組み込み機能を実行し続けますtrue。これは非常に明白です。外部実行ファイルではなく組み込みファイルを\:実行します。::おそらくオペレーティングシステムには存在しません(比較type -a :またはtype -a true試みenv :)。

help true組み込み機能が説明されていますが、オプションは言及されていません。

trueどのような措置を講じるべきかをどのように決定しますか?

組み込み関数は、それが何であれ、すべてのコマンドライン引数を無視するようです。 GNUは、true引数が1つだけであり、その引数がor--helpでない限り、すべてのコマンドライン引数を無視します--version

Zshでは、物語は基本的に同じです。

おすすめ記事