2014-11-14 112 views
0

我正在向一个函数传递一个数组并尝试打印该数组的每个元素。Bash脚本:将数组作为参数传递给函数并打印数组

下面是代码片段与围绕阵列参数引号:

#!/bin/bash 

print_array() 
{ 
     [email protected] 
     for i in "${array[@]}" #with quotes 
     do 
       echo $i 
     done 
} 

ar=("1. a" "2. b" "3. c") 
print_array ${ar[@]} 

当我执行上述脚本中,输出是

1. a 2. b 3. c 

下面是代码片段而不阵列周围引号参数:

#!/bin/bash 

print_array() 
{ 
     [email protected] 
     for i in ${array[@]} #without quotes 
     do 
       echo $i 
     done 
} 

ar=("1. a" "2. b" "3. c") 
print_array ${ar[@]} 

当我执行上面的脚本时,输出是

1. 
a 
2. 
b 
3. 
c 

输出根据数组参数周围的引号而变化。 我真的很迷惑输出显示。请帮我解决它。

预期输出应该是:

1. a 
2. b 
3. c 
+0

您不能将数组复制到标量中 - 标量只能保存一个数组元素,但不能超过数据元素。 – 2014-11-14 13:47:03

回答

2
#!/bin/bash 

print_array() 
{ 
     for i; 
     do 
       printf "%s\n" "$i" 
     done 
} 

ar=("1. a" "2. b" "3. c") 
print_array "${ar[@]}" # with quotes 

如果你想成为露骨,你可以写for i in "[email protected]"

你也可以这样写:

#!/bin/bash 

print_array() 
{ 
     array=("[email protected]") 
     for i in "${array[@]}"; do 
       printf "%s\n" "$i" 
     done 
} 

ar=("1. a" "2. b" "3. c") 
print_array "${ar[@]}" # with quotes 
+0

它不起作用,如果我想将参数存储在函数中,然后打印数组。 – sach 2014-11-14 13:40:50

+0

你是什么意思“它不工作”?您在问题中给出所需的输出,并且这会产生所需的输出。 – 2014-11-14 13:42:06

+0

我想将数组参数传递给函数,将函数中的参数存储在变量中,然后打印数组中的每个元素。 – sach 2014-11-14 13:45:13

0
#!/bin/bash 

print_array() 
{ 
    array=("[email protected]") 
    for i in "${array[@]}" 
    do 
      echo "$i" 
    done 
} 

ar=("1. a" "2. b" "3. c") 
print_array "${ar[@]}" 

结果:

1. a 
2. b 
3. c 

在赋值期间使用=()将变量保存为数组。

相关问题