如果输入:

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


为什么?我该怎么办呢?

最佳答案

在两个shell中,read是内置的。它具有相同的目的,但实现方式和选项不同。

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

echo "1 the
2 quick
3 brown" | while read -A D; do echo $D[2]--$D[1]; done




注意:zshbash之间还有很多区别:


zsh中,数组默认从1开始编号,在bash中,它们从0开始。
echo $ARRAY打印输出zsh中的所有元素,但仅输出bash中的第一个元素
要在sh中打印数组的第三个元素,可以使用echo $ARRAY[3]。在bash中,需要用大括号分隔下标,并且第三个元素的下标也是2echo ${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




通常,请记住,尽管zshbash相似,但它们远非相同,这一点很重要。

关于arrays - 为什么在zsh中读取-a失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36453146/

10-09 00:54