如果输入:
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
注意:
zsh
和bash
之间还有很多区别:在
zsh
中,数组默认从1开始编号,在bash
中,它们从0开始。echo $ARRAY
打印输出zsh
中的所有元素,但仅输出bash
中的第一个元素要在
sh
中打印数组的第三个元素,可以使用echo $ARRAY[3]
。在bash
中,需要用大括号分隔下标,并且第三个元素的下标也是2
: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
和bash
相似,但它们远非相同,这一点很重要。关于arrays - 为什么在zsh中读取-a失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36453146/