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