为什么读取-a在zsh中失败

Adr*_*May 8 arrays zsh

如果我输入:

echo "1 the
dquote> 2 quick
dquote> 3 brown" | while read -a D; do echo "${D[1]}--${D[0]}"; done
Run Code Online (Sandbox Code Playgroud)

在bash中它说:

the--1
quick--2
brown--3
Run Code Online (Sandbox Code Playgroud)

但在zsh中它说:

zsh: bad option: -a
Run Code Online (Sandbox Code Playgroud)

为什么?我该怎么做呢?

Ada*_*hon 9

两个炮弹read都是内置的.它有相同的目的,但实现和选项不同.

要读入数组zsh,read需要选项-A(而不是-a):

echo "1 the
2 quick   
3 brown" | while read -A D; do echo $D[2]--$D[1]; done 
Run Code Online (Sandbox Code Playgroud)

注意:zsh和之间还有很多不同之处bash:

一般来说,重要的是要记住,虽然zshbash相似,但它们远非相同.

  • 两个 shell 都不旨在与另一个 shell 兼容。它们都试图与 POSIX 兼容,但是 `-a` 和 `-A` 都不是 `read` 的 POSIX 变体的选项。我猜`zsh` 使用`-A` 与其内置的`set` 保持一致,后者也使用`-A` 来设置数组。顺便说一句:恰恰相反;`bash`(1996 年的 2.0)在使用 `-A` 时没有遵循 `zsh` 的例子(1994 年的 2.5),这很奇怪,因为它没有将 `-A` 用于其他任何事情。;) (2认同)