16

我通过“oh my zsh”使用 z shell。我想从我的 .zshrc 文件中获取多个别名文件,以便让事情井井有条。我已经为别名文件添加了前缀,.alias_因此我可以通过通配符加载它们。但是,调用source ~/.alias_*只加载第一个文件。如何编写脚本以获取多个文件?

文件名示例: .alias_git, .alias_local, .alias_server...

4

2 回答 2

16

选项1

您可以使用 for 循环:

for file in ~/.alias_*; do
    source "$file"
done

选项 2

另一种选择是构建一个包含您想要获取的所有文件的数组,然后使用 for 循环遍历该数组。

typeset -a aliases

aliases+="~/.alias_foo"
aliases+="~/.aliases_bar"
# etc...

for file in $aliases[@]; do
    if [[ -a "$file" ]]; then
        source "$file"
    fi
done

这实际上可以非常有效地进行组织良好的 zshrc 设置

于 2013-02-04T04:33:48.170 回答
3

一种更加 ZSH 特定的方式(需要setopt EXTENDED_GLOB):

alias_src=(
.alias_git
.alias_local
.alias_server
)
for f ($^alias_src(.N)) source $f
unset alias_src

前缀^具有将后续 glob 修饰符分别应用于数组的每个元素的效果。

尾随(.N)具有以下效果:

  • .: 只匹配文件
  • N:temporary setopt NULL_GLOB,这意味着只有实际存在的数组元素保留在数组中
于 2013-02-20T06:03:43.323 回答