SHELL的书写格式

SHELL的书写格式

我看到有的人编写的SHELL 程序象下面这样,谁能解释下?
引用:
if ((${iMap[y * iTrayWidth + x]} != -1 ))
then
return 1
fi
done
return 0;
}
if ((${iMap[y * iTrayWidth + x]} != -1 ))--这里多了一个“()”,这是书写的另种格式?
引用:
if [[ $key == $cESC && ${aKey[1]} == $cESC ]]
then
MyExit
elif [[ ${aKey[0]} == $cESC && ${aKey[1]} == "[" ]]
then
if [[ $key == "A" ]]; then sig=$sigRotate
elif [[ $key == "B" ]]; then sig=$sigDown
elif [[ $key == "D" ]]; then sig=$sigLeft
elif [[ $key == "C" ]]; then sig=$sigRight
fi
elif [[ $key == "W" || $key == "w" ]]; then sig=$sigRotate
elif [[ $key == "S" || $key == "s" ]]; then sig=$sigDown
elif [[ $key == "A" || $key == "a" ]]; then sig=$sigLeft
elif [[ $key == "D" || $key == "d" ]]; then sig=$sigRight
elif [[ "[$key]" == "[]" ]]; then sig=$sigAllDown
elif [[ $key == "Q" || $key == "q" ]]
then
MyExit
fi
if [[ $key == $cESC && ${aKey[1]} == $cESC ]]---为什么这里有两个“[[”“]]”      
Conditional expressions are used by the [[ compound command and the test and [ builtin commands.

(( expression ))
The arithmetic expression is evaluated . If the value of the expression is non-zero,the return status is 0;otherwise the return status is 1. This is exactly equivalent to

let "expression".      
是语法问题, 非格式问题      
引用:
原帖由 dearvoid 于 2008-11-6 15:14 发表
是语法问题, 非格式问题
语法问题??能解释下么,我看到整个程序都是用“))”,试了一下:象((i = j + 1))登价与 i=`expr $j + 1`或let i=j+1 , 而这个FOR循环也可以用WHILE循环。我想用“((“是不是就屏蔽了用$来注释变量?无论如何,用这种语法也好,格式也好,很简单。
引用:
for ((j = 0; j < 8; j += 2))
do
((i = j + 1))
((y = ${boxCur[$j]} + boxCurY))
((x = ${boxCur[$i]} + boxCurX))
((i = y * iTrayWidth + x))
iMap[$i]=$cBoxCur
done
如果去掉一层(),就是C程序了

      
(( )) 用起来确实简洁, 俺喜欢
--
bash 还是有些「智能」的, 包括数组下标里面的变量名也可以不加 $ 号的
引用:
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=16263 $?=0] ; i=0
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=16263 $?=0] ; (( a[i++] = i ))
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=16263 $?=1] ; (( a[i++] = i ))
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=16263 $?=0] ; (( a[i++] = i ))
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=16263 $?=0] ; echo $i
3
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=16263 $?=0] ; echo ${a[@]}
0 1 2
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=16263 $?=0] ; bye
      
引用:
原帖由 dearvoid 于 2008-11-7 09:52 发表
(( )) 用起来确实简洁, 俺喜欢
--
bash 还是有些「智能」的, 包括数组下标里面的变量名也可以不加 $ 号的
确实如此,看来一些参考资料该退休了 ,只见有人在用这种方式,却不见资料有提到过这种方法。。      
记得有个古老的资料说
((    )) 中的变量不要带美元符 (除 $?, $#, $1 单字变量外)
不要可能有不可预料的错误发生

不管如何, 少写点花花绿绿的 '$'
看起来更清爽
如 (( i = j + k )      
引用:
原帖由 li-jiahuan 于 2008-11-7 17:53 发表
记得有个古老的资料说
((    )) 中的变量不要带美元符 (除 $?, $#, $1 单字变量外)
古老? bash 的 man page 里面有讲       
有些模糊的条例, 自己在默默地遵守
就是想不起来从看到的消息      
打铁趁热
要不新个新帖, 讨论哪些用法是古老过时隐晦难懂的?