Arrays Bash将数组传递给函数将插入空元素

Arrays Bash将数组传递给函数将插入空元素,arrays,bash,function,Arrays,Bash,Function,我将一个空数组传递给一个函数,在该函数中,数组有一个元素,但元素为空 #!/bin/bash #ytest #============================================================== function ShowArray { echo "in ShowArray" AlocalArray=("${!1}") #alternatively you could do it like that #echo "${AlocalArray[@]}"

我将一个空数组传递给一个函数,在该函数中,数组有一个元素,但元素为空

#!/bin/bash
#ytest
#==============================================================
function ShowArray
{
echo "in ShowArray"

AlocalArray=("${!1}")

#alternatively you could do it like that
#echo "${AlocalArray[@]}"                      #DEBUG

echo "Showing content of array"

local iMax

   iMax=${#AlocalArray[*]}

   echo "ARRAYCOUNT: $iMax"
   for ((iItem=0; iItem < iMax ; iItem++))
   do
      echo "ITEM: ${AlocalArray[$iItem]}"
   done
}


declare -a AARRAY
echo "${AARRAY[@]}"                      #DEBUG
iMax=${#AARRAY[*]}

echo "HERE ARRAYCOUNT: $iMax ITEMS in ARRAY"
ShowArray "$AARRAY"
从函数中我得到:

in ShowArray
Showing content of array
ARRAYCOUNT: 1
ITEM: 
我的代码怎么了?提前谢谢


免责声明:此演示脚本没有任何用处,仅用于演示错误行为。

这不是在BASH中传递数组的正确方法,并且您的
ShowArray
函数没有访问在外部创建的相同数组

下面是如何在BASH中传递数组(旧版本和新版本)


谢谢阿努巴瓦。你让我开心。我还有一个问题。也许你也可以帮我:
in ShowArray
Showing content of array
ARRAYCOUNT: 1
ITEM: 
# works for older BASH version 3 also
ShowArray() {
   echo "in ShowArray -----------------------"
   AlocalArray=("${!1}")
   declare -p AlocalArray
   echo "Showing content of array"

   local iMax=${#AlocalArray[@]}    
   echo "ARRAYCOUNT: $iMax"
   for ((iItem=0; iItem < iMax ; iItem++)); do
      echo "ITEM: ${AlocalArray[$iItem]}"
   done
}

# works on BASH versions >4
ShowArray1() {
   echo "in ShowArray1 -----------------------"
   declare -n AlocalArray="$1"
   declare -p AlocalArray
   echo "Showing content of array"

   local iMax=${#AlocalArray[@]}    
   echo "ARRAYCOUNT: $iMax"
   for ((iItem=0; iItem < iMax ; iItem++)); do
      echo "ITEM: ${AlocalArray[$iItem]}"
   done
}

declare -a AARRAY=(foo bar)
declare -p AARRAY
iMax=${#AARRAY[@]}
echo "HERE ARRAYCOUNT: $iMax ITEMS in ARRAY"
ShowArray "AARRAY[@]"
ShowArray1 "AARRAY"
declare -a AARRAY='([0]="foo" [1]="bar")'
HERE ARRAYCOUNT: 2 ITEMS in ARRAY
in ShowArray -----------------------
declare -a AlocalArray='([0]="foo" [1]="bar")'
Showing content of array
ARRAYCOUNT: 2
ITEM: foo
ITEM: bar
in ShowArray1 -----------------------
declare -n AlocalArray="AARRAY"
Showing content of array
ARRAYCOUNT: 2
ITEM: foo
ITEM: bar