Arrays 如何查看Bash数组中存在哪些值?

Arrays 如何查看Bash数组中存在哪些值?,arrays,bash,Arrays,Bash,给定一个数组(在Bash中),是否有根据索引打印数组内容的命令 类似这样:arr[0]=…,arr[1]=… 我知道我可以在for循环中打印它,但我正在寻找一个执行该操作的命令。给定一个数组,该数组的连续索引从0开始: $ arr=(one two three) 和非连续索引: $ declare -a arr2='([0]="one" [2]="two" [5]="three")' 您可以打印以下值: $ echo ${arr[*]} # same with arr2 one

给定一个数组(在Bash中),是否有根据索引打印数组内容的命令

类似这样:
arr[0]=…
arr[1]=…


我知道我可以在for循环中打印它,但我正在寻找一个执行该操作的命令。

给定一个数组,该数组的连续索引从
0开始:

$ arr=(one two three)   
和非连续索引:

$ declare -a arr2='([0]="one" [2]="two" [5]="three")'
您可以打印以下值:

$ echo ${arr[*]}    # same with arr2
one two three
或者,对
arr
使用C样式的循环:

$ for (( i=0;i<${#arr[@]};i++ )); do echo "arr[$i]=${arr[$i]}"; done
arr[0]=one
arr[1]=two
arr[2]=three
或者用
声明-p
检查:

$ declare -p arr
declare -a arr='([0]="one" [1]="two" [2]="three")'
如果数组具有非连续索引(C循环将在其中中断),则该方法也有效:

注意:一个常见的错误是使用sigil
$
并认为您正在寻址该数组或命名值。这是使用的未加修饰的名称,因为符号将取消引用并告知包含的名称的详细信息,而不是该名称:

$ k=arr
$ declare -p $k
declare -a arr='([0]="one" [1]="two" [2]="three")'  # note this is 'arr' , not 'k'

$ declare -p k
declare -- k="arr"
由于此时不带参数的
declare
将打印整个Bash环境,因此您还可以对该输出使用
sed
grep
awk
等实用程序:

$ declare | grep 'arr'
arr=([0]="one" [1]="two" [2]="three")
k=arr

declare-p arr
——在bash提示下,输入
help declare
@glennjackman我找不到重复项-您介意回答这个问题以便将来可以参考吗?
$ k=arr
$ declare -p $k
declare -a arr='([0]="one" [1]="two" [2]="three")'  # note this is 'arr' , not 'k'

$ declare -p k
declare -- k="arr"
$ declare | grep 'arr'
arr=([0]="one" [1]="two" [2]="three")
k=arr