{!name[*]}如何使用?

{!name[*]}如何使用?

复制内容到剪贴板
代码:
[dell@scsm dell]$ ok=(2 4 6 8 10 12 14)
[dell@scsm dell]$ echo ${!ok[@]}

[dell@scsm dell]$ echo ${ok[*]}
2 4 6 8 10 12 14

为什么${!ok[@]}什么也没输出?

      
你的 bash 什么版本? 这是 bash 3.0 才有的一个新 feature, 是从 ksh 借鉴过来的
引用:
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[23623 0] ; unset arr
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[23623 0] ; arr[0]=a
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[23623 0] ; arr[2]=b
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[23623 0] ; arr[4]=c
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[23623 0] ; arr[6]=d
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[23623 0] ; echo ${!arr[@]}
0 2 4 6
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[23623 0] ; echo $BASH_VERSION
3.2.17(1)-release
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[23623 0] ; bye
      
复制内容到剪贴板
代码:
${!name[@]}
${!name[*]}
       If name is an array variable,  expands  to  the  list  of  array
       indices  (keys)  assigned  in  name.   If  name is not an array,
       expands to 0 if name is set and null otherwise.  When @ is  used
       and the expansion appears within double quotes, each key expands
       to a separate word.
      
按例子测试,还是不好使!
复制内容到剪贴板
代码:
[dell@scsm dell]$ ary[0]=a
[dell@scsm dell]$ ary[2]=b
[dell@scsm dell]$ ary[4]=c
[dell@scsm dell]$ ary[6]=d
[dell@scsm dell]$ ary[8]=e
[dell@scsm dell]$ echo ${!ary[*]}

[dell@scsm dell]$ echo $BASH_VERSION
2.05b.0(1)-release
      
升级你的 bash 吧