2012-01-07 33 views
1

从我读过的tldp.org中,双括号构造((...))允许您引用不带$前缀的bash变量。然而,试图引用计数参数变量$#时,脚本拒绝与bash中的双括号构造中的参数计数变量

bash: ((: i < # : syntax error: operand expected (error token is "# ") 

奇怪的是,当散列前缀工作,脚本工作正常

供您参考,这里的工作代码:

fun(){ 
    i=0 
    while ((i < $#)); do 
      echo $1; 
      shift 
    done 
} 

我的问题是:我怎么知道什么时候是正确的,包括前缀,当它是不是?

回答

2

只要它不是SPECIAL PARAMETER,您可以放弃$。另外,如果您正在做PARAMETER EXPANSION里面(())您还需要$

+0

谢谢你的解释。你知道我在哪里可以找到有关'(())'结构的更好的文档吗? – seininn 2012-01-07 12:59:51