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

时间:2016-04-06 13:49:27

标签: arrays zsh

如果我输入:

echo "1 the
dquote> 2 quick
dquote> 3 brown" | while read -a D; do echo "${D[1]}--${D[0]}"; done

在bash中说:

the--1
quick--2
brown--3

但在zsh中它说:

zsh: bad option: -a

为什么呢?我该怎么做呢?

1 个答案:

答案 0 :(得分:6)

在两个shell orWhere中都是内置的。它有相同的目的,但实现和选项不同。

要在read中读取数组,zsh需要选项read(而不是-A):

-a

注意: echo "1 the 2 quick 3 brown" | while read -A D; do echo $D[2]--$D[1]; done zsh之间存在更多差异:

  • bash数组中,默认情况下编号从1开始,在zsh中,它们从零开始。
  • bash打印输出echo $ARRAY中的所有元素,但只输出zsh中的第一个元素
  • 要在bash中打印数组的第三个元素,您可以使用sh。在echo $ARRAY[3]中需要大括号来分隔下标,第三个元素的下标也是bash2
  • echo ${ARRAY[2]}中,您通常不需要引用参数扩展来正确处理带有空格的值。例如

    zsh

    只会在FILENAME="no such file" cat $FILENAME 中打印一条错误消息:

    zsh

    cat: 'no such file': No such file or directory 中有三条错误消息:

    bash
  • cat: no: No such file or directory cat: such: No such file or directory cat: file: No such file or directory 中,内置zsh默认评估转义码。在echo中,您需要传递bash参数。

    -e

    echo 'foo\tbar'

    zsh

    foo bar

    bash
  • ...

一般来说,重要的是要记住,虽然foo\tbar zsh相似,但它们远非相同。