ZSH 在 for 循环中列出变量名会导致错误,但在 BASH 中可以工作

ZSH 在 for 循环中列出变量名会导致错误,但在 BASH 中可以工作

这里有一位新的 ZSH 用户正在编写他的 .zshrc 文件,该文件使用 GNU find 和 for 循环来获取 ~/.aliases 中的 shell 脚本,这些脚本设置了我的 shell 别名。我刚刚在网上花了一个多小时尝试了各种方法,想知道为什么这段代码在 BASH 中有效,但在 ZSH 中无效:

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

aliases: attempt to set slice of associative array

一个多小时后,我碰巧用不同的变量名重写了该代码:

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

并且它成功了。

ZSH 处理此代码的方式与 BASH 有何不同?为什么?有什么优势吗?

答案1

这给了我们接下来会发生什么的线索:

别名:尝试设置关联数组的切片

该参数aliases存储已定义的别名。它被定义为关联数组,您不能将标量存储到其中。

使用例如此代码以很好的格式显示关联数组的内容:

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

相关内容