Arrays 在bash3中作为参数传递数组

Arrays 在bash3中作为参数传递数组,arrays,bash,Arrays,Bash,我提到过,但失败了。这是我的测试脚本(都是Bash3.0) bash版本 GNU bash, version 3.00.16(1)-release (sparc-sun-solaris2.10) Copyright (C) 2004 Free Software Foundation, Inc. 脚本t.sh fn() { local i local v1="$1" local v2="$2" local v3="$3" echo "v1=$1" echo "v2=$2" echo

我提到过,但失败了。这是我的测试脚本(都是Bash3.0)

bash版本

GNU bash, version 3.00.16(1)-release (sparc-sun-solaris2.10)
Copyright (C) 2004 Free Software Foundation, Inc.
脚本t.sh

fn() {
 local i
 local v1="$1"
 local v2="$2"
 local v3="$3"
 echo "v1=$1"
 echo "v2=$2"
 echo "v3=$3"
 declare -a a1=("${!1}")
 declare -a a2=("${!2}")
 echo "a1:"
 for i in ${!a1[*]} ; do
  echo "  ${a1[$i]}"
 done

 echo "a2:"
 for i in ${!a2[*]} ; do
  echo "  ${a2[$i]}"
 done
}
caller() {
  local a=("a1 a2" "a3" "a4")
  local b=("b1" "b2" "b3" "b4")
  echo "method 1:"
  fn "${a[@]}" "${b[@]}" $1 $2 $3
  echo "method 2:"  # workable on bash 4.2.45
  fn a[@] b[@] $1 $2 $3
}
caller c
输出

method 1:
v1=(a1 a2 a3 a4)
v2=(b1 b2 b3 b4)
v3=c
a1:
a2:
method 2:
v1=a[@]
v2=b[@]
v3=c
t.sh: array assign: line 10: syntax error near unexpected token `('
t.sh: array assign: line 10: `(a1 a2 a3 a4)'
预期产量

...
a1:
   a1 a2
   a3
   a4
a2:
   b1
   b2
   b3
   b4

我不确定问题出在哪里,但我已确认Bash 3.2.25的操作:

./caller.sh
method 1:
v1=a1 a2
v2=a3
v3=a4
a1:

a2:

method 2:
v1=a[@]
v2=b[@]
v3=c
a1:
  a1 a2
  a3
  a4
a2:
  b1
  b2
  b3
  b4
03:36 lakehouse~/scr/tmp> bash --version
GNU bash, version 3.2.25(1)-release (i586-suse-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

我没有得到你显示的输出。我看到了
v1=a1a2v2=a3v3=a4
。你确定你的bash版本是3.0bash版本4.1.11(2)@DanielYCLin:也许是在更新你的bash版本?我是说,bash v3很古老。。。(准确地说,自上次发布以来已经8年了,自v4发布以来已经4年了。)我们也不再修复K&R C问题了。;-)话虽如此,正如你们从我最初的问题中看到的,数组传递仍然是不可靠的,所以旧版本的bash对此并不感到惊讶。我不是管理员,我没有升级系统的权限。所以,我只需要一个变通方法。我被迫使用SunOS和sparc CPU以及非常旧的bash,然后是你。也许这就是为什么你的结果和我不一样。