Bashで私は演算子や予約語で何かを選択するいくつかの例を見つけました:(すべてBashマニュアルの引用)
(...)
と{...}
: どちらもコマンドリストを作成するために使用されます。しかし、最初のものは演算子で、2番目は予約語です。
サブシェルの作成に加えて、歴史的な理由から、2つの構成の間には微妙な違いがあります。中かっこは予約語なので、スペースやその他のシェルメタ文字でリストと区切る必要があります。括弧は、空白でリストと区別されなくても、シェル内の別々のトークンとして認識される演算子です。
!
:論理否定を示します。パイプの前に来ると予約語です。
予約語「!」がパイプの前に来る場合、終了状態は上記の終了状態の論理的否定です。
3つの演算子です。
- シェル算術式では、
- 条件式で
[...]
- 条件式に含まれます
[[...]]
。
私の質問は次のとおりです
同じ意味を持っているにもかかわらず、一部は予約語で、他のものは演算子であるのはなぜですか?
私の目標は、Bashのデザイン履歴やBashがそのように設計された理由を理解することではありません(したがって、この質問をスキップできます)。しかし、役に立つかもしれません。私の目標は予約語ではできませんが、演算子はできることとその逆の場合を理解することです(次の2つの質問を参照)。
予約語の代わりに演算子で作成すると、どのような利点がありますか?
演算子の代わりに予約語を作成すると、どのような利点がありますか?
同様の例がありますか?
私の意図は単に例を集めるのではなく、それからいくつかの原則を導き(上記の2つの質問を参照)、特定の詳細をよりよく理解し、混乱やミスが発生しないようにすることです。だからこの質問はスキップしてください。
答え1
まず、「演算子」と「予約語」を区別してみましょう。それらは同じ抽象化レベルにはなく、まったく異なるものです。標準英語定義*で始まる:
オペレーター:操作を表す記号や機能です。
(「記号」は「単一文字」を意味しません。言葉またシンボルです。 )
タスク:加算、乗算、微分などの形式的な規則に従って、数字、数量、数式などを変更または操作するプロセス。
それは明らかにしたいですか?独自の例をいくつか作成してください。私が助けます。
その後、「予約語」があり、実際に「予約語」を探すだけです。
予約済み:特定の目的または個人用に予約
この場合、私たちは特定の目的のためにシェルデザイナーによって予約されており、他の目的に使用できない単語に言及しています(少なくともエスケープする必要はありません)。
気づくこの用語はいいえ互いに分離されたものを説明してください。 つまり、はい形式的な規則に従って、式(またはコマンド)に対する変更または操作を表す予約語。
実際に!
パイプ以前の「予約語」ではい実はオペレーター標準英語でのみ定義されたこのパイプの終了状態です。
問題は純粋に意味論的であり、その違いは特定のマニュアルの作成者が考えるほど重要ではありません。このタグを適用すると後ろにデザインファクトとラベルは、デザインに含まれる特定の動作を説明するために使用されます。もの(「予約語」または「演算子」)は、他の単語と比較して独自の利点があります。これ商標場合によっては利点があるかもしれませんが、正直に言うと、他のもの。 それらは2つの異なる用語にすぎません。
特定のプログラムの意味:
過去を大まかに見るとこの特定のマニュアル、この質問の重要な用語は実際には次のとおりです。
- トークン
- 言葉
- メタ文字
- オペレーター
- 制御演算子
- 予約語
この順序に従ってください。
私が得たもの:
単語は、メタ文字を配置して他の単語と区別する必要があります。演算子自体は「単語区切り記号」(メタ文字)で構成されるため、単語と具体的に区別する必要はありません。
{...}
(...)
したがって、この質問を引き起こした用語を使用せずに、引用した引用符での間の重要な違い全体を伝えることができます。ここに一つあります。修正:
サブシェルの作成に加えて、歴史的な理由から、2つの構成の間には微妙な違いがあります。中括弧は、スペースやその他のシェルメタ文字でリストと区別する必要があります。括弧は、スペースでリストと区別されない場合でも、シェル内の別々のトークンとして認識されます。
全体的な意味はそこにあります。これ定義「演算子」と「予約語」の違い 違いはありません。
*定義はNew Oxford American Dictionaryからインポートされました。