#!/bin/bash
# query1.sh
numbers=(53 8 12 9 784 69)
echo ${numbers[3]} # <--- this echoes "9" to standard output.
number=numbers[3]
echo number # <--- this echoes "number" to stdout.
echo $number # <--- this echoes "numbers[3]" to stdout.
echo ... <--- ???
我应该使用什么语法来回显名为的变量number
并获取“9”作为标准输出?
答案1
你的问题是这样的:
number=numbers[3]
没有将数组的第四个元素分配numbers
给变量number
。那是因为numbers[3]
实际上没有任何意义:
$ numbers=(53 8 12 9 784 69)
$ echo $numbers[3]
53[3]
发生的情况是,当您单独使用数组名称作为变量时,实际使用的是数组的第一个元素 ( 53
)。于是就$numbers[3]
变成了53[3]
。你想要的是:
$ number=${numbers[3]}
$ echo $number
9
答案2
这就是您需要使用 ${!var}
运算符进行变量间接寻址的地方:
bash-4.4$ numbers=(53 8 12 9 784 69)
bash-4.4$ number=numbers[3]
bash-4.4$ echo "${!number}"
9
等价的zsh
是:
numbers=(53 8 12 9 784 69)
number=numbers[4]
echo ${(P)number}
(zsh
数组索引从 1 开始,就像大多数其他 shell 和 shell 工具一样,因此您可以使用它numbers[4]
来获取第四个数字)。
如果您想将数组的第四个元素的值分配给$number
,您可以number=$numbers[4]
在zsh
, 或number=${numbers[3]}
in ksh
(并且bash
它只是复制ksh
数组)中执行。
答案3
当你声明一个变量时,你不需要使用$
,但是当你使用它时,你应该使用它。
所以只要像这样分配,它应该可以工作
number=${numbers[3]}