Beliebt

Der Name der ZSH-Listenvariablen in der for-Schleife verursacht einen Fehler, funktioniert jedoch in BASH - zsh

Neuer ZSH User schreibt hier sein.zshrc-Datei, die GNU find und eine for-Schleife verwendet, um Shell-Skripte in ~ / .aliases zu erzeugen, die meine Shell-Aliase einrichten. Ich habe gerade ĂĽber eine Stunde im Internet verbracht und verschiedene Dinge ausprobiert und mich gefragt, warum dieser Code in BASH funktioniert, aber nicht in ZSH:

$ for aliases in $(find ~/.aliases -maxdepth 1 -name "*_aliases"); source $aliases

aliases: attempt to set slice of associative array

Über eine Stunde später habe ich den Code mit einem anderen Variablennamen neu geschrieben:

$ for files in $(find ~/.aliases -maxdepth 1 -name "*_aliases"); source $files

und es hat funktioniert.

Wie behandelt ZSH diesen Code anders als BASH und warum? Gibt es irgendwelche Vorteile?

Antworten:

0 fĂĽr Antwort â„– 1

Dies gibt uns den Hinweis, was passiert:

Aliase: Versuch, einen Teil des assoziativen Arrays zu setzen

Der Parameter aliases wird verwendet von zsh um den definierten Alias ​​zu speichern. Es ist als assoziatives Array definiert und Sie können keinen Skalar darin speichern.

Verwenden Sie z. dieser Code So zeigen Sie den Inhalt von assoziativen Arrays an, die gut formatiert sind:

for k in "${(@k)aliases}"; do
echo "$k -> $aliases[$k]"
done