Zsh 与 bash 的答案完全不同

Zsh has totally different answer with bash

我正在使用 zsh shell 并设置了一个环境数组。 像这样:

➜  ~ a=(1 2 3 4)
➜  ~ echo $a[3]
3
➜  ~ bash
%n@%m:%~%# b=(1 2 3 4 5)
%n@%m:%~%# echo $b[3]
1[3]
%n@%m:%~%# echo ${b[3]}
4
%n@%m:%~%# exit
exit
➜  ~ echo ${a[3]}
3
➜  ~

五颜六色的标题是zsh,而另一个是bash,显然是相反的结果。我从一本关于 shell 的书中读到的内容就像 bash 的行为。那么 zsh 错了吗?如果我为 bash 编写脚本,它会在 zsh 环境中遇到问题吗?我是Linux的新人,谢谢解答

为了回答主要问题,通常,zsh 的脚本应与 bash 的脚本分开编写。 bashzsh 都是他们自己,不应将其视为同一产品的两个版本。

您的示例中发生的情况有两个原因:

  1. 索引

    • zsh 索引数组从 1n
    • bash 索引从 0n-1
    • 的数组
  2. 语法

    • zsh 使用 $array[index] 语法
    • bash 使用 ${array[index]} 语法,并将 $array 理解为对数组第一个元素的访问,因此如果后面跟着任何其他内容,则余数被视为文字(这就是 1[3] 的来源)