~によるとこの投稿、[
組み込み関数であり、[[
キーワードです。コマンドとして扱うことができるので、それ[
以降のすべてのエントリは[[
コマンド引数として扱われ、最終引数を満たすまでスペースで区切る必要があります]
。]]
しかし、種類は何ですか((
?
type ((
エラーを報告します。
bash: syntax error near unexpected token `('.
私はスペースがそれに関連していないことを知りました(( ))
。
echo $((1+1))
echo $(( 1+1))
echo $(( 1+1 ))
echo $(( 1+ 1))
echo $(( 1 + 1 ))
それは同じです
一般化する
~によるとPOSIX標準文書:コマンドセクションのグループ化
「((」で始まる文字シーケンスがシェルから算術拡張(「$」が前にある場合))に解析される場合、拡張を実装するシェルは「((expression))」を算術式として評価できます。 . "(( "はグループ化コマンドではなく算術評価として導入されました。互換性のあるアプリケーションでは、シェルが算術評価を実行するのを防ぐために2つの先行文字()をスペースで区切る必要があります)。
そして内部算術評価は((...))
Cスタイルに従います。だからスペースはインテリアとは何の関係もありません((...))
答え1
((
一言ではありません。[
とは異なり、[[
コマンドを構成する単語リストの一部ではありません。それを考える最良の方法は句読点です。実際には、コンテキストに応じて単一の記号で結合することも組み合わせることもできない2つの句読点です。この点では と に似ています>&
。||
シェルの語彙分析器/パーサーは特別な方法で句読点を処理します。
((
は演算子の半分、残りの半分はです))
。これらは一緒に「outfix」構文を持つ算術式演算子を形成します。 Bashのようなシェル言語の構文構造は、伝統的なプログラミング言語の構文に非常にきれいに従わない。 (たとえば、句読点の意味は構文のコンテキストによって異なり、語彙分析と構文解析の間には非常に密接な関係があります。)
type
シェルの語彙アナライザ/パーサーがどのように機能するかについての情報ではなく、単純なコマンドに表示される可能性のある単語やキーワードに関する情報のみを提供できます。