1. ホーム
  2. bash

[解決済み] 二重括弧、片括弧、中括弧の使い方

2022-03-14 18:20:49

質問

Bashでの括弧、括弧、中括弧の使い方と、その二重形式と一重形式の違いに戸惑っています。明確な説明はありますか?

どのように解決するのですか?

Bashで。 test[ はシェルビルトインです。

ダブルブラケット というシェルキーワードを使うことで、さらに機能を追加することができます。例えば &&|| ではなく -a-o という正規表現マッチング演算子があり =~ .

また、簡単なテストでは、二重の角括弧は単一の角括弧よりもかなり速く評価されるようです。

$ time for ((i=0; i<10000000; i++)); do [[ "$i" = 1000 ]]; done

real    0m24.548s
user    0m24.337s
sys 0m0.036s
$ time for ((i=0; i<10000000; i++)); do [ "$i" = 1000 ]; done

real    0m33.478s
user    0m33.478s
sys 0m0.000s

中括弧は、変数名の区切りに加えて、次のように使用します。 パラメータ展開 というようなことができるようになります。

  • 変数の中身を切り捨てる

    $ var="abcde"; echo ${var%d*}
    abc
    
    
  • と同様の置換を行います。 sed

    $ var="abcde"; echo ${var/de/12}
    abc12
    
    
  • デフォルト値を使用する

    $ default="hello"; unset var; echo ${var:-$default}
    hello
    
    
  • その他にも

また、ブレース展開で文字列のリストを作成し、ループで反復処理するのが一般的です。

$ echo f{oo,ee,a}d
food feed fad

$ mv error.log{,.OLD}
(error.log is renamed to error.log.OLD because the brace expression
expands to "mv error.log error.log.OLD")

$ for num in {000..2}; do echo "$num"; done
000
001
002

$ echo {00..8..2}
00 02 04 06 08

$ echo {D..T..4}
D H L P T

先頭のゼロとインクリメントの機能はBash 4以前にはなかったことに注意してください。

ブレースの展開について思い出させてくれたgboffiに感謝します。

二重括弧は 算術演算 :

((a++))

((meaning = 42))

for ((i=0; i<10; i++))

echo $((a + b + (14 * c)))

また、整数型変数や配列変数のドル記号を省略したり、演算子の周りにスペースを入れて読みやすくすることができます。

また、片かっこは 配列 のインデックスを表示します。

array[4]="hello"

element=${array[index]}

右辺の配列参照には(ほとんど/すべての)中括弧が必要です。

エフェメイアの のコメントで、サブシェルにも括弧が使われることを思い出しました。そして、配列を作成するために使用されることを思い出しました。

array=(1 2 3)
echo ${array[1]}
2