MW211 EXIT

devlog
シェル/囲いの違い
2013年04月18日
シェルにおいてはいろいろな記号で変数や処理を囲うことになるが
この違いをまとめた。

まず、変数は「$変数」でも「${変数}」でもよい。
「{}」の扱いはこの程度の認識でOK。

それ以外の各記号の違いはこんな感じとなる。
┌───┬────┬────┬────────────────────────┐
│ 囲い │変数展開│処理展開│                      説明                      │
├───┼────┼────┼────────────────────────┤
│ '■' │   ×   │   ×   │純粋な文字列として扱われる                      │
├───┼────┼────┼────────────────────────┤
│  ■  │   ○   │   ×   │(囲いなし)                                      │
├───┼────┼────┼────────────────────────┤
│ "■" │   ○   │   △   │                                                │
├───┼────┼────┼────────────────────────┤
│ `■` │   ×   │   ○   │ネストができない旧型                            │
├───┼────┼────┼────────────────────────┤
│$(■) │   ×   │   ○   │二重括弧で四則演算もできる新型                  │
└───┴────┴────┴────────────────────────┘

変数展開についてのそれぞれの結果は以下の通り。
┌──────────────────────────────────────┐
│$ I=8;echo '$I';                             →展開なし「$I」               │
│$ I=8;echo $I;                               →変数展開「8」                │
│$ I=8;echo "$I";                             →変数展開「8」                │
│$ I=8;echo `$I`;                             →処理展開「ash: 8: not found」│
│$ I=8;echo $($I);                            →処理展開「ash: 8: not found」│
└──────────────────────────────────────┘

二重括弧による四則演算についてのそれぞれの結果は以下の通り。
┌──────────────────────────────────────┐
│$ echo '(1 + 1)';                                              →「(1 + 1)」│
│$ echo (1 + 1);     →「ash: Syntax error: word unexpected (expecting ")")」│
│$ echo "(1 + 1)";                                              →「(1 + 1)」│
│$ echo `(1 + 1)`;                                    →「ash: 1: not found」│
│$ echo $((1 + 1));                                                   →「2」│
├──────────────────────────────────────┤
│$ echo $(expr 1 + 1);                                                →「2」│
│$ echo `expr 1 + 1`;                                                 →「2」│
└──────────────────────────────────────┘
「$(())」は「expr」コマンドと同等になる、これは便利。
分類:Linuxシェル