Bash脚本:将数组作为参数传递给函数并打印数组

时间:2014-11-14 13:29:16

标签: bash

我将数组传递给函数并尝试打印数组的每个元素。

下面是带有数组参数引号的代码段:

#!/bin/bash

print_array ()
{
        array=$@
        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 ()
{
        array=$@
        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

2 个答案:

答案 0 :(得分: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 "$@"

你也可以写:

#!/bin/bash

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

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

答案 1 :(得分:0)

#!/bin/bash

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

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

结果:

1. a
2. b
3. c

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