GNU/Linux >> Linux の 問題 >  >> Linux

[[$ a ==Z*]]と[$a==Z *]の違いは?

これら2つの間に違いはありますか。

[[ $a == z* ]]

および

[ $a == z* ] 

異なる出力を持つ例を教えてもらえますか?

さらに、 [[]]の動作はどのようになりますか []とは異なります ?

承認された回答:

[[…]]の違い および[…] 引用符のないスペースを使用したパラメータ展開は、二重角かっこ「[[」内では機能するが、単一角かっこ「[」内では機能しないのはなぜですか?。
重要なのは、[[…]] は特別な構文ですが、 [ コマンドの変な名前です。 [[…]] 中身についての特別な構文規則があります、[…] しません。

ワイルドカードのしわが追加されたので、 [[$ a ==z *]]の方法は次のとおりです。 評価されます:

  1. コマンドを解析します:これは[[…]]です 条件式$a ==z *の周りの条件付き構文 。
  2. 条件式を解析します。これは==です。 二項演算子、オペランド $ a およびz*
  3. 最初のオペランドを変数aの値に展開します 。
  4. ==を評価します 演算子:変数 aの値をテストします パターンz*に一致します 。
  5. 条件式を評価します。その結果は条件付き演算子の結果です。
  6. コマンドが評価されるようになりました。条件式がtrueの場合はステータスが0、falseの場合はステータスが1になります。

[$ a ==z *]の方法は次のとおりです。 評価されます:

  1. コマンドを解析します:これは[です $ aという単語を評価して形成された引数を使用したコマンド 、 == z * ]
  2. $ aを展開します 変数aの値に 。
  3. コマンドのパラメーターで単語の分割とファイル名の生成を実行します。
    • たとえば、 aの値が 6文字の文字列foob * (例: a ='foo b *' )および現在のディレクトリ内のファイルのリストは( bar baz qux zim zum )、展開の結果は次の単語のリストになります: [ foo バー baz == zim zum ]
  4. コマンド[を実行します 前のステップで取得したパラメータを使用します。
    • 上記の値の例では、 [ コマンドは構文エラーを要求し、ステータス2を返します。

注: [[$ a ==z *]]で 、ステップ3で、 aの値 単一の単語が期待されるコンテキストにあるため、単語の分割やファイル名の生成は行われません(条件演算子 ==の左側の引数) )。ほとんどの場合、その位置で1つの単語が意味をなす場合、変数の展開は二重引用符の場合と同じように動作します。ただし、そのルールには例外があります。 [[abc ==$ a]] aの値の場合 ワイルドカードが含まれ、次に abc ワイルドカードパターンと照合されます。たとえば、 aの値が a *です 次に[[abc==$ a]] true(ワイルドカード * のため) $ aの引用符で囲まれていない展開から来る bcに一致 )一方、 [[abc =="$ a"]] falseです(通常の文字 * のため) $ aの引用された拡張から来る bcと一致しません )。 [[…]]の内部 、二重引用符は、文字列照合演算子の右側を除いて違いはありません。 ( = ==!= および=〜

関連:一致する行と一致する行からn番目の行を印刷しますか?
Linux
  1. GettyとAgettyの違いは?

  2. 〜/ .profileと〜/ .bash_profileの違いは?

  3. NssとPamの違いは?

  1. InnoDBとMyISAMの違いは何ですか?

  2. Cのstrtok_rとstrtok_sの違いは何ですか?

  3. fsck と e2fsck の違いは何ですか?

  1. Sudo Su –とSudo Su —の違いは何ですか?

  2. Centos –シャットダウン18:00と18:00シャットダウンの違いは?

  3. .exrcと.vimrcの違いは?