~からBashにシェル組み込みコマンドの代わりに外部 `time`コマンドを使用させる。、Stefan Chazerasは次のように書いています。
time
組み込みのbashがありません。time
キーワードなので、次のことができます。time { foo; bar; }
私達はそれを確認できます:
$ type -a time
time is a shell keyword
time is /usr/bin/time
time
これが組み込みコマンドである可能性があることを示していません。
「キーワード」の定義は何ですか?
「キーワード」は、Bash リファレンスマニュアルの「予約語」と同じ概念ですか?
予約語
この単語はシェルに対して特別な意味を持ちます。ほとんどの予約語は
for
、などのシェルフロー制御構造を導入しますwhile
。キーワードはコマンド(または組み込みコマンド)ではありませんか?
コマンドではなくキーワード
time
(または組み込みコマンドではありません)?キーワードと組み込み機能の定義を考えると、組み込み機能では
time
なくキーワードが必要なのはなぜですか?「がキーワードな
time { foo; bar; }
ので「できる」という理由は何ですか?time
ベストアンサー1
キーワード、予約語、および組み込みコマンドは、単純なコマンドの「最初の単語」です。キーワードと組み込み関数という2つのグループに分けることができます。二人は相互に排他的です。単語(タグ)はキーワードまたは組み込みの単語ですが、両方にすることはできません。
なぜ「最初の言葉」なのか?
~から「簡易コマンド」のPOSIX定義(強調):
「単純なコマンド」は、任意の順序で任意の変数割り当ておよびリダイレクトのシーケンスであり、任意にワードおよびリダイレクトが続き、制御演算子によって終了される。
2. - 変数の割り当てや方向の再指定ではない単語を拡張する必要があります。拡張後もフィールドがまだ存在する場合最初のフィールドはコマンド名で処理する必要があります。残りのフィールドはコマンドのパラメーターです。
「最初の単語」が識別され、拡張されると(エイリアスを介して)、最後の単語は「command」になり、1行に1つのコマンドしかありません。コマンドワードは組み込みコマンドまたはキーワードです。
キーワード
はい、キーワードは「予約語」です。 「man bash」をロードしてキーワードを検索するか、次のコマンドを実行してくださいLESS=+/'keyword' man bash
。
検索の最初のクリックは次のとおりです。
キーワードシェル予約語。
完成した部分で発生しますが、非常に明確です。
予約語
POSIXでは「予約語」の定義少し残った予約語の役割の説明。
しかし、Bashマニュアルにはより良い作業定義があります。 「予約語」(LESS=+/'RESERVED WORDS' man bash
)を検索し、次を探します。
予約語予約語は、シェルに特別な意味を持つ単語です。次の単語は、引用符が付けられていない場合と、単純なコマンドの最初の単語、大文字と小文字、またはコマンドの3番目の単語の場合は予約されていると認識されます。
! case do done elif else esac fi for function if in select then until while { } time [[ ]]
組み込み
Bashのマニュアルでは定義されていませんが、非常に簡単です。
シェルの基本要件(cd、pwd、eval)を満たす、一般的な速度を満たす、または場合によっては外部ユーティリティによる解釈との競合を避けるために、シェルの内部で実装されるコマンド。
時間がキーワードです
なぜ時間は組み込みではなくキーワードなのでしょうか?
コマンドが2番目の単語として存在できるようにします。
if ... then .... fi
これは、最初のキーワードの後にコマンド(複合コマンドも含む)を含めることができる方法と似ていますif
。またはwhile
などcase
。