Arrays 为什么读a在zsh中失败
如果我键入:Arrays 为什么读a在zsh中失败,arrays,zsh,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: bad option: -a 但在zsh中,它说: the--1 quick--2 brown--3 zsh: bad option: -a 为什么??我应该怎么做呢?在两个shell中,
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: bad option: -a
但在zsh中,它说:
the--1
quick--2
brown--3
zsh: bad option: -a
为什么??我应该怎么做呢?在两个shell中,read是一个内置的。它的目的相同,但实施和选择不同 要在
zsh
中读取数组,read
需要选项-A
(而不是-A
):
echo“1
2快速
3棕色“|读时-A D;不回显$D[2]--$D[1];完成
注意:在
zsh
和bash
之间有更多的区别:
- 默认情况下,在
中,数组从一开始编号,而在zsh
中,数组从零开始编号bash
输出echo$ARRAY
中的所有元素,但仅输出zsh
bash中的第一个元素
- 要在
中打印数组的第三个元素,可以使用sh
。在echo$array[3]
中,需要大括号来分隔下标,第三个元素的下标也是bash
:2
echo${ARRAY[2]}
- 在
中,为了正确处理带有空格的值,通常不需要引用参数展开式。比如说zsh
将在FILENAME=“没有这样的文件” cat$FILENAME
中只打印一条错误消息:zsh
但是cat:“没有这样的文件”:没有这样的文件或目录
中有三条错误消息:bash
cat:no:没有这样的文件或目录 cat:这样:没有这样的文件或目录 cat:file:没有这样的文件或目录
- 在
中,默认情况下,内置zsh
计算转义码。在echo
中,您需要为此传递bash
参数-e
echo'foo\tbar'
:zsh
foo-bar
:bash
foo\tbar
一般来说,重要的是要记住,虽然
zsh
和bash
是相似的,但它们远非相同。Hmm。它似乎不使用-a表示其他任何东西。似乎是一种奇怪的毫无意义的不兼容。两个shell都不想与另一个shell兼容。它们都试图与POSIX兼容,但无论是-a
还是-a
都不是POSIX变量read
的选项。我猜zsh
使用-A
与其set
内置一致,后者也使用-A
来设置数组。顺便说一句:情况正好相反bash
(1996年的2.0版)在使用-A
时没有遵循zsh
的示例(1994年的2.5版),这很奇怪,因为它没有将-A
用于任何其他用途我认为zsh确实试图在没有任何东西反对它的时候与bash兼容。zsh可能是第一个,但bash的受欢迎程度要高出数千倍。zsh没有将-a用于其他任何东西,因此我认为它应该只做一些实用的事情。1996年是20年前,就像我写的:bash
和zsh
是非常不同的,否则的话,只会导致问题。更改此选项不会更改此选项。真的,为什么zsh
要打破一个既定的行为,而更像bash
?如果需要bash构造,请使用bash
。如果您想要可移植代码,请使用符合POSIX的结构。如果您想利用功能zsh
,则需要使用zsh构造,其中许多构造与bash
中的构造或多或少有所不同。