Bashでのループ処理は、下記のように do
と done
で挟むと思うのですが、
#!/bin/bash
for f in ./*
do
echo $f
done
試しに、{}
で囲んでも意図通りに動きました。
#!/bin/bash
for f in ./*
{
echo $f
}
実行結果:
$ ./scripts2.sh
./scripts.sh
./scripts2.sh
{}
で囲んでも動いた理由がよくわからなかったのですが、こちらのコードが動く理由について教えていただけないでしょうか?
hppa2.0w-hp-hpux11.11
の/bin/sh
でも{ }
で動いてしまうっス。一方でPOSIX
的には「できる」という記載がないのでdash
だとこれを拒絶してしまうっス。Syntax error: "{" unexpected (expecting "do")
– 774RR Sep 13 '22 at 04:10for
、case
、select
が歴史的 (historical) な理由で{ }
に対応しているようです。http://www.mirbsd.org/htman/i386/man1/mksh.htm – Koichi Nakashima Sep 13 '22 at 16:18