ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

bashの{} (Braces) に関するメモ

(2024-01-16 初稿 )

 本日、Bashスクリプトを作っていて、ちょっとハマったのでメモ。

Emsg="ファイル数が合ってないよ"
[[ $(ls -1 | wc -l) -ne 10 ]] && { echo $Emsg; exit 1 }
/home/hoge/bin/bash-test: 行 28: 構文エラー: 予期しないファイル終了 (EOF) です

不思議なことに、以下なら大丈夫。

[[ $(ls -1 | wc -l) -ne 10 ]] && {
  echo $Emsg
  exit 1
}

調べてみたら、以下のサイトに答えがあって、{}を1行で書くときには、{}の両端にスペースと各文末に ;(セミコロン) が必要とのこと。知らなかったぁ〜

ということで、1行で書くなら、以下のとおり、exit 1; とセミコロンを付ける。

[[ $(ls -1 | wc -l) -ne 10 ]] && { echo $Emsg; exit 1; }

 

もうひとつ、ついでに、{}は do 〜 done の代わりに使えると、以下のサイトにあった。

なるほど、ちょっとスクリプトがすっきりかな…

for f in *.txt; do    # これまで
  ls -l $f
done
for f in *.txt; {     # {}を使った
  ls -l $f
}

さらに、一行で書くなら

for f in *.txt; { ls -l $f; }

{}内の;(セミコロン)を忘れないように…

 

以上、皆さんの参考になれば…

関連ページ