参数扩展将参数中的${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,,*
或^^
case 转换;
对于其他一些扩展,例如${parameter##word}
;
用于使用前缀/后缀++
或--
运算符;
用于使用$((++n))
而不是仅++n
.
但是,长度扩展${#parameter}
正如我所料:
在上面的代码片段中,echo "${#a[++n]}->${n}"
而不是echo "${a[++n],,}->${n}
会产生3->2
而不是three->3
~& a[2]="two" 的长度确实是 3 个字符。
我想参数扩展发生了两次。但是为什么会这样呢?