In beiden Shells read
ist ein Built-in. Es teilt den gleichen Zweck, aber die Implementierung und die Optionen unterscheiden sich.
Um in einem Array in zsh
, zu lesen read
erfordert die Option -A
(statt -a
):
echo "1 the
2 quick
3 brown" | while read -A D; do echo $D[2]--$D[1]; done
Hinweis: Es gibt viele weitere Unterschiede zwischen zsh
und bash
:
- In
zsh
Arrays sind von nummeriert eine standardmäßig, in bash
beginnen sie von Null.
echo $ARRAY
druckt gibt alle Elemente in zsh
aber nur das erste Element in bash
- Um das dritte Element eines Arrays in
sh
zu drucken Sie echo $ARRAY[3]
verwenden können. In bash
Klammern sind erforderlich, um den Index zu begrenzen, auch der Index für das dritte Element ist 2
: echo ${ARRAY[2]}
.
In zsh
müssen Sie normalerweise keine Parametererweiterungen angeben, um Werte mit Leerstellen richtig zu behandeln.
cat: 'no such file': No such file or directory
aber drei Fehlermeldungen 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
die builtin echo
auswertet Escape-Codes standardmäßig beispielsweise
FILENAME="no such file"
cat $FILENAME
wird nur eine Fehlermeldung in zsh
drucken . In bash
müssen Sie das Argument -e
dafür übergeben.
echo 'foo\tbar'
zsh
:
foo bar
bash
:
foo\tbar
...
Im Allgemeinen ist es wichtig, im Auge zu behalten, dass, während zsh
und bash
sind ähnlich, sie sind weit davon entfernt, gleich zu sein.
Hmm. Es scheint nicht zu verwenden -a für etwas anderes. Scheint wie eine merkwürdig sinnlose Inkompatibilität. –
Keine Shell soll mit der anderen Shell kompatibel sein. Beide versuchen, mit POSIX konform zu sein, aber weder '-a' noch '-A' sind Optionen für die POSIX-Variante von 'read'. Ich würde annehmen, dass 'zsh'' -A' verwendet, um mit seiner 'set'-Built-In-Datei konsistent zu sein, die auch' -A 'verwendet, um ein Array zu setzen. BTW: Es ist umgekehrt; 'bash' (2.0 in 1996) folgte nicht' zsh's Beispiel (2.5 in 1994) mit '-A', was merkwürdig ist, da es' -A' für nichts anderes verwendet. ;) – Adaephon
Ich denke, dass zsh versucht, mit bash kompatibel zu sein, wenn nichts dagegen spricht. Zsh mag zuerst gewesen sein, aber Bash ist Tausende Male populärer. Zsh verwendet nicht -a für irgendetwas anderes, also denke ich, dass es nur die pragmatische Sache tun sollte. 1996 war vor 20 Jahren. –