加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:57:19 所属栏目:安全 来源:网络整理
导读:${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
${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源代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读