(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; }
{}内の;(セミコロン)を忘れないように…
以上、皆さんの参考になれば…