日期:2014-05-16  浏览次数:20745 次

shell脚本的一个问题,if [ -z "${_xarray[${#_xarray[@]}]}" ]
# determine whether arrays are zero-based (bash) or one-based (zsh)
_xarray=(a b c)
if [ -z "${_xarray[${#_xarray[@]}]}" ]
then
  _arrayoffset=1
else
  _arrayoffset=0
fi
unset _xarray

这个里面的判断句如何理解? if [ -z "${_xarray[${#_xarray[@]}]}" ]

------解决方案--------------------
这个表达式${#_xarray[@]}是获取_xarray当中的元素总数的特殊操作。
------解决方案--------------------
_xarray=(a b c)
数组包括3个元素a,b,c。$[_xarray[0]]=a,$[_xarray[1]]=b,$[_xarray[2]]=c
${#_xarray[@]}求数组个数,结果为3
所以${_xarray[${#_xarray[@]}]}为${_xarray[3]}
由于数组第4个元素下标为3,不存在即空字符串所以
 if [ -z "${_xarray[${#_xarray[@]}]}" ]成立
 _arrayoffset=1