${parameter,pattern}参数扩展将参数中的字母字符转换为小写字母.
关于cygwin 1.7.11-1 Bash 4.1.10(4)以及我的debian挤压Bash 4.1.5(1);
如果我运行以下,我得到一个奇怪的结果:
$declare -a a=(Zero One Two Three); n=0; echo "${a[n],}->${n}"; echo "${a[++n]}->${n}"; echo "${a[++n],}->${n}" zero->0 One->1 three->3 $
注意:类似的结果发生:
for,*或^^案件转换;
对于其他一些扩展,例如${parameter ## word};
使用前缀/后缀或 – 运算符;
使用$((n))而不是n.
但是,长度扩展${#parame}可以正常工作:
在上面的代码段中,echo“${#a [n]} – > ${n}”而不是echo“${a [n],} – > ${n}会产生3> 2而不是三 – > 3~& a [2] =“2”的长度实际上是3个字符.
我想,参数扩展发生了两次.但为什么会这样呢?
解决方法
我抓住了最新的bash源码&似乎此版本已解决此问题:
$./bash --version GNU bash,version 4.2.24(1)-release (x86_64-unkNown-linux-gnu) copyright (C) 2011 Free Software Foundation,Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> $
但请注意,在我的Debian Squeeze稳定版上,我有:
$apt-cache policy bash bash: Installed: 4.1-3 Candidate: 4.1-3 Version table: *** 4.1-3 0 500 http://ftp.uk.debian.org/debian/ squeeze/main amd64 Packages 100 /var/lib/dpkg/status $ $bash --version GNU bash,version 4.1.5(1)-release (x86_64-pc-linux-gnu) copyright (C) 2009 Free Software Foundation,Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
我认为这意味着目前在Debian Squeeze上,bash的最新稳定版本是4.1.5(1)&包含这个bug.同样在Cygwin 1.7.11-1上,目前最新的bash软件包似乎是版本4.1.10(4)&包含这个bug.当然这个问题很容易解决,所以不需要构建4.2源代码.