在 ZSH For 循环中编写 Alias 仅选择最终循环迭代

Writing Alias in a ZSH For Loop selects only the final loop iteration

我正在编辑我的 .zshrc 文件,为我在大学修读的不同课程创建别名。我目前在 5 门课程中这样做:

alias 301='cd /Users/<...>/university/ELEC301'

因为我所有的课程都有相同的父文件夹,所以我试图将此作为一个 for 循环来执行,而不是使用不同的课程代码使用 10 行相同的命令。

我已经试过了,但我最终得到了一个别名,它只对数组的最后一个元素起别名,尽管我的 echo 命令打印出我期望的内容:

courses=(301 302 303)
for course in $courses; do
    echo $course
    alias $course='cd /Users/<...>/university/ELEC${course}'
done

在我的 ZSH 终端中,当我 运行 别名 301 时,它始终将我定向到我的 303 文件夹,或者数组的最后一个元素,尽管我 echo 打印:

301
302
303

我试过以不同的方式编写数组,使用中间变量更改回显的顺序。我不确定发生了什么,感谢您的帮助。

通过将变量 course 放入 single-quotes ' 可以防止 shell 扩展它。

您需要使用 double-quotes "

那个:

courses=(301 302 303)
for course in $courses; do
    echo "$course"
    alias $course="cd /Users/<...>/university/ELEC$course"
done

可以正常工作。