这里有一位新的 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