shスクリプト(これは実行できない)
mode=0
if ($# > 0) then
mode=1
endif
if [ $mode -eq 0 ]; then
i=0
while [ $i -lt 6 ]
else
for i in 6 7 8 9 10
endif
do
echo $i
i=$((i + 1))
if [ $((i % 2)) -eq 0 ]; then
done
else
echo "*"
done
endif
echo "done"
cshスクリプト
set mode=0
if ($# > 0) then
set mode=1
endif
if ($mode == 0) then
set i=0
while ($i < 6)
else
foreach i (6 7 8 9 10)
endif
echo $i
@ i++
if ($i % 2 == 0) then
end
else
echo "*"
end
endif
echo "done"
cshだとループを実行時に変えられるしループの終わりも動的に変えられるってことのようだ。ブロックという考えがなくてループのおわりの end は単なる goto だと思えば、そういうものかという気もする。図示するとこんな感じになってブロックがネストしてない。
set mode=0
if ($# > 0) then
set mode=1
endif
_______
if block| if ($mode == 0) then
| set i=0 ______________
| while ($i < 6) | while/foreach block
| else ______|
| foreach i (6 7 8 9 10) |
|_______endif |
echo $i |
_______ @ i++ |
if block| if ($i % 2 == 0) then |
| end_________________________|
| else |
| echo "*" |
| end_________________________|
|_______endif
echo "done"
実行例
% sh foreach.sh foreach.sh: 9: Syntax error: "else" unexpected (expecting "do") % sh foreach.sh xxx foreach.sh: 9: Syntax error: "else" unexpected (expecting "do") % csh foreach.csh 0 * 1 2 * 3 4 * 5 done % csh foreach.csh xxx 6 * 7 8 * 9 10 * done %















