Bash函数可以在多行上打印数组

时间:2016-11-14 17:36:24

标签: arrays linux bash function printf

我编写了这个函数来在bash中打印数组而不使用那种可怕的括号语法:

printarr()
{
     arr=$1      # first argument
     printf '%s\n' "${arr[@]}"
}

无法按预期工作。

它会打印出你喂它的第一个数组,但是如果你把它送到另一个数组,它会再打印出第一个数组。

我称之为

$ arr=( "single" "line" "arr" )
$ printarr $arr
$ multiarr=( "multi"
> "line"
> "arr")
$ printarr $multiarr

GNU bash,版本3.2.25(1) - 发布

1 个答案:

答案 0 :(得分:3)

如果您在将数组发送到函数时不想使用括号,请发送其名称并使用间接扩展:

#! /bin/bash
printarr()
{
     arr=$1'[@]'
     printf '%s\n' "${!arr}"
}

arr1=( "single" "line" "arr with spaces" )
arr2=( "SINGLE" "LINE" "ARR WITH SPACES" )

printarr arr1
printarr arr2