微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

arrays – Bash参数扩展和数组索引操作

${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源代码.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐