在zsh函数

时间:2018-12-19 10:11:24

标签: shell zsh

在我的zsh中,我定义了一个函数

a() { local x=*.proto; ls "$x"; }

当我在终端中点击a时,得到了

  

指定的路径'* .proto'不存在。

我的目录类似:

hello.proto

如何通过通配符匹配?

1 个答案:

答案 0 :(得分:1)

使用数组,并使用printf()在其中扩展全局结果。像nullglob上的bash一样,zsh shell具有null_glob选项,可在扩展失败时静默退出。所以把它们放在一起

a() {
   # Turing on the option to prevent glob expansion failure
   setopt null_glob
   # Put the results to an array, so that a quoted expansion would keep the
   # filename containing shell meta-characters intact
   local x=(*.proto)
   # Print the array if it is non-empty.
   (( "${#a[@]}" )) && printf '%s\n' "${x[@]}"
}