シェルスクリプトにおける丸括弧「()」 角括弧「[]」 波括弧「{}」の使い方

シェルスクリプトにおける丸括弧「()」 角括弧「[]」 波括弧「{}」の使い方hosiiのメモ帳シェルスクリプトを作成していると、丸括弧「()」 角括弧「[]」 波括弧「{}」の使い方をついつい忘れてしまい、毎回ググる作業が発生してしまう。
今度こそ忘れないように使い方をまとめておく。

括弧「()」

別名:括弧、パーレン

サブシェルの呼び出しに使う。
サブシェル内の実行結果は、呼び出しとは異なるシェルプロセスで実行される。
複数のコマンドをサブシェル内で実行する場合はセミコロン「;」で連結させるが、最後のコマンドはセミコロン不要。

_VAR=aaa
(_VAR=bbb; echo $_VAR)
# bbbが表示される
echo $_VAR
# サブシェルの処理は受け継がれないのでaaaが表示される

角括弧「[]」

別名:ブラケット

一番よく使うのは、if文の中のtestコマンドの省略形。
「[」「]」それぞれの前後にスペースを入れないとシェルに怒られるので注意。

# test -e $fileと等価
if [ -e $file ]; then
  echo "file found"
if

また、ファイル名のワイルドカードにも使われる。

#a.txt b.txt c.txt
[abc].txt

#1.txt 2.txt 3.txt
[1-3].txt

#先頭がアルファベット以外のファイル
[^a-zA-Z]

#先頭が数字以外のファイル
[^0-9]*

波括弧「{}」

別名:ブレース

シェルスクリプト内で、変数を展開するのに使用する。
波括弧を付けないと、誤った変数を使用してしまう場合があるので、なるべく付けるようにする。

_a='hoge'
_abc='fuga'

echo $_abc
#fugaが表示される

echo ${_a}bc
#hogebcが表示される

また、一連のコマンドをまとめる際にも使用する。サブシェルと異なり現在のシェルで処理が行われる。
波括弧とコマンドの間にスペースを入れないと文法エラーになるので注意。また、コマンドの末尾にセミコロン「;」が必要な点もサブシェルの書き方と異なる。

{ echo a; echo b; echo c; } > test.txt
cat test.txt
#3回分のechoの出力がまとめて書き込まれている
a
b
c

波括弧はさらに、複数のファイルを指定するときにも利用できる。
波括弧の中は順番に展開されるので、mvやcpのコマンドでも使える。

#mydirの直下にあるtest1.txt test2.txtを開く
cat mydir/test{1,2}.txt

#test1.txtをtest2.txtに名前変更する
mv test{1,2}.txt

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です