IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

shellの中括弧{}の便利な使い方

どうも、nippaです。

最近知った、shellの中括弧{}の便利な使い方を紹介します。

1. 変数の表現

よく知られているのが変数を表現するに中括弧{}を利用する場合です。

例えば、コマンドライン

VAR='aaa'
echo ${VAR}
# 結果
aaa

のような使い方はよく知られています。

変数名の前後に文字列を結合する場合、変数を中括弧{}で括って表現します。

2. コマンドをまとめる

最近使うようになったものとして、中括弧{}を使ってコマンドをまとめる使い方です。

テキストファイルに文字を書き込む場合、これまでは以下のように行っていました。

echo "this" > test.txt
echo "is" > test.txt
echo "a pen" > test.txt
cat test.txt
# 結果
this
is
a pen

これを中括弧{}を使って表現すると、

{ echo "this"; echo "is"; echo "a pen"; } > test.txt
cat test.txt
# 結果
this
is
a pen

とまとめることができます。

{の後、}の前のはスペースは必須ですので忘れないでください。

3. ファイル名を順に展開する

ファイルのコピーや移動にファイルを複数指定する際に中括弧{}を使って手間を省けます。

test1ディレクトリの配下にある2つのテキストファイル(text1.txt text2.txt)をtest2ディレクトリに移動させます。

test1/
├ text1.txt
└ text2.txt

test2/

これまでだと、

mv test1/text1.txt test2/
mv test1/text2.txt test2/
ls test2
text1.txt  text2.txt

のように移動させていました。

中括弧{}を使うと

mv test1/text{1,2}.txt test2/
ls test2
text1.txt  text2.txt

と上の1ファイルずつ移動させることと同じ結果になります。 細かく言えば、実際は、mv test1/text1.txt test1/text2.txt test2/の省略形になります。 ディレクトリ構造が深い場合などに非常に便利な使い方です。

またファイル名が違う場合には、

mv test1/{text1.txt,tmp.tar.gz} test2/
ls test2
text1.txt  tmp.tar.gz

と書けば、一度にファイル名を指定することができます。

また、中括弧{}は順に展開されるため、ファイル名の変更にも使えます。

mv test2/text{1,3}.txt
ls test2
text2.txt  text3.txt

このような便利な使い方もできます。

注意としては、中括弧{}内には、スペースを含んではいけません。 カンマの前後、{の後、}の前にスペースを入れるとエラーになります。

感想

  1. 3.の使い方は非常に便利な時があります。

コマンドライン上で何ども同じ作業をしなければならない場合があるので、中括弧{}を利用すれば作業を効率化できます。

shellの中括弧{}の便利な使い方でした。

ではでは、また次回。