基本的 Bash 数组问题

基本的 Bash 数组问题
#!/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]}

相关内容