如果我输入:
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
为什么呢?我该怎么做呢?
答案 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]
中需要大括号来分隔下标,第三个元素的下标也是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
相似,但它们远非相同。