If I type:
echo "1 the
dquote> 2 quick
dquote> 3 brown" | while read -a D; do echo "${D[1]}--${D[0]}"; done
in bash it says:
the--1
quick--2
brown--3
but in zsh it says:
zsh: bad option: -a
Why? And what should I do instead?
In both shells read is a builtin. It shares the same purpose, but the implementation and options differ.
In order to read in an array in zsh, read requires the option -A (instead of -a):
echo "1 the
2 quick
3 brown" | while read -A D; do echo $D[2]--$D[1]; done
Note: There are many more differences between zsh and bash:
zsh arrays are numbered from one by default, in bash they start from zero.echo $ARRAY prints outputs all elements in zsh but only the first element in bash
sh you can use echo $ARRAY[3]. In bash braces are needed to delimit the subscript, also the subscript for the third element is 2: echo ${ARRAY[2]}.In zsh you usually do not need to quote parameter expansions in order to handle values with white spaces correctly. For example
FILENAME="no such file"
cat $FILENAME
will print only one error message in zsh:
cat: 'no such file': No such file or directory
but three error messages in bash:
cat: no: No such file or directory
cat: such: No such file or directory
cat: file: No such file or directory
In zsh the builtin echo evaluates escape codes by default. In bash you need to pass the -e argument for that.
echo 'foo\tbar'
zsh:
foo bar
bash:
foo\tbar
…
Generally, it is important to keep in mind that, while zsh and bash are similar, they are far from being the same.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With