Linuxのシェルでは、各種ブラケットの役割は何ですか?

ただのため?にLinuxのシェルで様々な記事の括弧の役割は何かについて話をするあなたと共有する小扁今日のLinuxエントリジュニアパートナーの下で一生懸命勉強しなければならないが、Linuxの小さなパートナーに精通しているが、各シェルで使用していることを知っていますブラケットの種類は、その後、これらのブラケットを使用すると、あなたは何を知っていますか?さんはそれを見てみましょう!

 

小さなブラケット、括弧()

図1に示すように、単一の括弧()

①コマンド群。ブラケットは、括弧変数が使用するスクリプトの残りの一部にすることはできませんので、新しいサブオーダー実行シェルを開きますコマンド。ブラケットは、セミコロンで区切って複数のコマンドは、最後のコマンドにはセミコロンは、コマンドとブラケットの間にスペースがありませんすることができます。

②コマンド置換。cmd` `と同等の、シェルのコマンドラインを再度スキャンするには、cmdを実行$(CMD)の構造を発見し、元の順序にその標準出力は、この出力を得るために、最初に$(CMD)を置きます。いくつかのシェルは、tcshのように、サポートしていません。

③は、アレイを初期化するために使用されます。例えば:配列=(ABCD)

図2に示すように、二重括弧(())

①整数拡張。この拡張計算は浮動小数点型をサポートしていない計算に整数です。0に発現評価される場合、拡張演算式と計算値の(()EXP)構造が、次に終了状態コード1、または「false」を返し、および非ゼロ値の発現が返さ終了ステータスはゼロ、または「真」になります。ロジック場合は、式expは真、または偽または0です。

②長い括弧演算子などとして、式は、操作のC言語の規則に準拠して、$((EXP))にも、三項演算子ご利用いただけます。異なる操作(例えば、2進数、8進数、16進数)搬送するとき、全ての出力が自動的に小数に変換されます。以下のような:エコー$((16#5fを))95(16進ターン10進数)であることが判明

③単に(())は、= 5として再定義変数値であってもよく、使用する;((++))6 $ aに再定義することができます

④一般算術比較で使用、二重括弧は、変数$記号の接頭辞で使用することはできません。サポートは、以上の式がカンマで区切られたブラケット。長いC言語運用規則に沿った括弧内の表現として、直接的に使用することができるような((I = 0、I <5; I ++))として、配列 `に私用のために、二重括弧を使用せずに0 4`またはiについて{0..4}です。IF(($ I <5))別の例では、[$ iが5 -lt]場合に比べて、二重括弧を使用せずに、直接使用することができます。

第二に、括弧、大括弧[]

図1に示すように、単一の大括弧[]

①bash内部コマンド、[及び試験は等価です。私たちは、絶対パスを指定しない場合は、通常我々は、組み込みコマンドのすべてのbashを使用しています。/テスト構造は、識別テストを呼び出すブラケットコマンドを残している場合、右のブラケット条件を決定するために閉じられます。これはテストとして、比較式やファイルとしてその引数を指揮し、比較の結果に基づいて、終了ステータスを返すように。/テスト構造は、必ずしも右のブラケットではなく、バッシュの新バージョンでは、そうである必要があれば。

②Testおよび[]は、比較演算子でのみ利用可能である==と!=、比較のために、文字列比較のために使用され、どちらもこの形態-gt整数、唯一-eq用い整数比較ではありません。かどうかを比較文字列または整数の比較は以下の符号よりも大なり記号をサポートしていません。[AB \ <BC]、結果が真である、である、リターン・ステータスは0です:あなたが本当に使いたい場合は、「AB」と「BC」を比較した場合、エスケープの形式の文字列を比較するために使用することができます。[]及び論理又は-a -o図とロジック。

③は、文字の範囲。正規表現の一部として、文字のマッチングの範囲を説明します。括弧内の定期的なテストの目的として使用することはできません。

④アレイ構造の文脈では、ブラケットは、アレイ内の各要素の番号を参照するために使用されます。

図2に示すように、二重括弧[]

①[キーワードbashのプログラミング言語。ていないコマンドは、[[]]構造]構造は、[よりも汎用性です。すべての文字は、[[と]]の間で、ファイル名の拡張子または単語分割を発生しませんが、パラメータ展開とコマンド置換が発生します。

サポートは、正規表現をシェルにも=〜演算子を使用して②サポート文字列のパターンマッチング、。あなたは[[ハロー==地獄?]]、結果が真であるようなモデルだけでなく、文字列として、右の文字列比較を置くことができます。[]一致する文字列またはワイルドカードでは、無引用符。

③[...] [] [...]の条件付き構造を使用して、代わりに、論理エラーの数は、スクリプトを防止することができます。例えば、&&、||、<と> [] []オペレータに正常に存在することができる条件の構造が、[]構造中に存在する場合、それが説明します。たとえば場合は直接使用することができます[[$!= 1 && $!= 2]]、二重引用符の場合であれば[$ -ne 1] && [$!= 2]場合、または[$ Aに比べて、適用されません-ne 1 -a $ A!= 2]。

単一の要素として発現における二重括弧を④bash、終了状態コードを返します。

例:

もし($ I <5)

もし[$ I -lt 5]

もし[$ 1(a)-ne -a $ A!= 2]

もし[$ -ne 1] && [$!= 2]

もし[[$!= 1 && $!= 2]]

$(配列0 4)で、私はのために、エコー$ Iを行い、行われ

私のseq 0 4` `中のため、行われ; $ iのエコー行います

(; I <5; I ++)は、(i = 0);のためのエコー$ Iを行い、行われ

I {0..4}内のため、エコー$ Iを行い、行われ

第三に、中括弧、中括弧{}

図1に示すように、従来の使用法

①拡張ブレース。(ワイルドカード(グロブ))かっこは、ファイル名の拡張子を行います。このギャップが引用またはエスケープされない限り、中括弧では、それは、空で許可されていません。最初:ブレースへのファイルのコンマ区切りのリストに拡大します。タッチ{A、B}はA.TXT B.TXTをもたらすの.txt。第二:A.TXT B.TXT c.txt d.txtをもたらすの.txtタッチ{a..d}括弧にビット(..)のような、配列を拡張からのファイルのリストを分離するための

#LS {EX1、EX2} .SH

ex1.sh ex2.sh

#LS {EX {1..3}、EX4} .SH

ex1.sh ex2.sh ex3.sh ex4.sh

#LS {EX [1-3]、EX4} .SH

ex1.sh ex2.sh ex3.sh ex4.sh

また、内部基としても知られている②コードブロックは、このような構造は、実際に匿名関数を作成します。そして、括弧はコマンドで、括弧内のコマンドは、まだ括弧内に変数の残りの部分を使用することができ、そのスクリプトを実行するために、新しいサブシェルを開きません。括弧内にセミコロンコマンドで区切られ、最後の1にもセミコロンを持っている必要があります。{}最初のコマンドと左括弧の間の空間でなければなりません。

2、いくつかの特別な代替構造

$ {変数:-string}、$ {VAR:+ストリング}、$ {VAR:=文字列}、$ {VAR:?文字列}

①$ {VAR:-string}と$ {VAR:=文字列}:変数varが空の場合は、$ {VAR:-string}を置換する文字列をコマンドライン、そうでなければ変数VARは、その後、空でありませんvarは変数$ {VAR:-string}の値で置き換え; {VAR:=文字列} $のための置換規則および$ {VAR:-string}は{=ストリングVAR}と同じであり、違いは$です$ {VAR:=文字列}非常に一般的に使用されていない場合に使用、それは、変数代入か否かが判定される変数VARに割り当てられた文字列はながら文字列で:{=ストリングVAR} varが空である場合、$を交換そして、それをデフォルト値に割り当てます。

②$ {VAR:+ストリング}置換規則とは逆上に、それが文字列で置換される場合varが空でない場合にのみ、すなわち、VARが空の場合、または変数VARの値によって置換される置換されていない、即ち、ヌル値。(変数varが空であるので、ので、2つのステートメントは同等であること)

③$ {VAR:文字列?}ルールが置き換え:変数varが空でない場合は、varの値は、$ {VAR :?文字列}に置き換えられ、VAR変数が空の場合は、標準エラー出力に文字列を入れて、スクリプトを終了。私たちは、変数の値かどうかを確認するために、この機能を使用することができます。

補足拡張:上記構造において、5つの代替文字列は必ずしも一定値、使用可能な別の変数の値または指令は出力されません。

パターンマッチング置換構造の3、4種類

メモリパターンマッチング方法:

#は(キーボード#$それの左側)左を削除することです

%は右側($%のキーボードの右側)を削除することです

%と#記号は、単一のマッチで最小であり、二つのシンボルは、同じ最大のマッチングです。

$ {ヴァー%のパターン}、$ {VAR %%パターン}、$ {VAR位パターン}、$ {VAR ##パターン}

第一のモード:$ {変数%パターン}、このモデルでは、ルックアップにシェル変数は、それがパターンにパターンの端部であり、そしてかどうかを確認するように、右側の変数のコマンドラインの内容は、最短除去と一致する場合モード

第2のモデル:$ {変数%%パターン}、このモードでは、変数シェルルックスは、それが所定のパターンである場合、パターンの端部が確認し、そうであれば、コマンドラインから最長の右側に変数の内容を削除しますパターンマッチング

第3のモデル:$ {変数#パターン}そうである場合、このモードでは、シェルの検索に変数は、左最短マッチングパターンを除去するために、それがパターンにスタートパターンであるかどうかをコマンドラインで変数の内容を表示します

第四のモード:$ {変数##パターン}このモードでは、シェルの検索に変数は、それがパターンにパターンの端部であり、もしそうであれば、最長の右にコマンドライン中の変数の内容を除去するかどうかを確認します一致モード

これらの4つのモードが唯一のパターンマッチングに*記号を使用し、変数の値を変更し、%%%、および###の違いはありません。ブラケットが表す構造パターンのサポートワイルドカード*手段は、ゼロ個以上の任意の文字の,?表しだけで任意の文字に一致し、[...]括弧内の文字にマッチし、[!...]の文字が一致していません。

#ヴァー=テストケース

#エコー$ VAR

テストケース

#エコー$ {VAR%sの* E}

testca

#エコー$ VAR

テストケース

#エコー$ {VARの%% S * E}

#エコー$ {VARの#?E}

stcase

#エコー$ {VAR ##?E}

stcase

#エコー$ {VAR ## * E}

#エコー$ {VAR ## * S}

E

#エコー$ {VAR ##テスト}

場合

4、文字列抽出と交換

$ {た:NUM} $ {た:NUM1:NUM2}、{$ /パターン/パターン}、{$ //パターン/パターン}

第一のモード:$ {VAR:NUM}、VaRのNUM文字にすると、このモデルでは、シェルの抽出全ての文字の最後まで。numは右から文字列が開始を抽出する、負であれば、そのような$ {-2 VAR}として結腸全体NUM括弧、後にデジタルまたはスペースを使用する必要があり、numは、左から正の数で、0の場合、$ {VAR:1-3}または$ {VAR:( - 2)}。

第二のモード:$ {VAR:NUM1:NUM2}、NUM1位置、NUM2長です。これは、位置NUM1 $ $ VARの文字列の長さ$ num2の部分文字列から抽出の開始を示します。それは否定することはできません。

第3のモデル:$ {VAR /パターン/パターン}示す他の第1マッチング列パターンに置き換えるパターンVAR。

第四モード:他のパターンは、varは、すべてのパターン文字列に一致する表現で$ {VAR //パターン/パターン}が置き換えられます。

[百ルート@〜]#のVAR = /ホーム/数百

[ルート@ CentOSの〜]#エコー$ VAR

/ホーム/ CentOSの

[ルート@ CentOSの〜]#エコー$ {VAR:5}

/ CentOSの

[ルート@ CentOSの〜]#エコー$ {VAR:-6}

CentOSの

[ルート@ CentOSの〜]#エコー$ {VAR:( - 6)}

CentOSの

[ルート@ CentOSの〜]#エコー$ {VAR:1:4}

[ルート@のCentOS〜]#エコー$ {VAR / O / H}

/ HHME / CentOSの

[ルート@ CentOSの〜]#エコー$ {VAR // O / H}

/ hhme / cenths

4つのブラケットの後、シンボル$

(1)$ {}変数の値の、曖昧ブレースを省略することができるなし。

(2)$(CMD)コマンド置換、および `同じ効果をcmd`、結果はあまりにもシェルバージョンは、tcshのよういくつかの$()コマンド置換形式をサポートしていない、シェルコマンドcmdが失われています。

(3)$((発現))と同じ `exprexpression`効果、それらはC言語に操作のルールを満たすEXP数式EXP、またはさらには三項演算子の計算値を計算し、論理表現することができます。

第五に、使用

複数のコマンドを実行します

(1)シングル括弧、(CMD1、CMD2、CMD3)新しい実行CMD1、CMD2、CMD3シェルのサブシーケンスを開くために、セミコロンで区切られたそれぞれのコマンドは、コマンドは、セミコロンを持続することができません。

(2)単一の括弧{CMD1、CMD2、CMD3;}コマンド間のセミコロンで区切られた現在のシェル、CMD2、CMD3、CMD1に実行コマンドシーケンス、コマンドが最後のセミコロンである必要があり、最初のコマンドそして、左括弧の間にスペースで区切らなければなりません。

そして{}()は、括弧リダイレクションコマンドでシンボルは括弧文字コマンド外リダイレクトセクションは、すべての括弧に影響を与えるだけで影響を与えます。

これらは、小さなパートナーは、Linux関連の仕事に取り組んでいる助けることができるものでは?希望のLinuxシェルで様々な括弧の役割この記事についてのあなたと共有する小さなシリーズ今日です。より多くのLinux関連の知識についての懸念を覚えマルコ教育公式サイトああ!

出典:ユートピア2号

blog.csdn.net/taiyang1987912/article/details/39551385

*免責事項:コンテンツ及び画像は、ネットワーク(内容の編集の一部)からある情報源が間違っているか、権利は、お問い合わせ、または許可を削除してくださいと、元の作者に属します。

おすすめ

転載: www.cnblogs.com/woshijiuke/p/12378526.html