Unix shell 延迟文件名扩展

Unix shell delay filename expansion

我有一个 (java) 软件项目,源文件是几个目录。

如果我在 .zshrc 文件中执行以下操作:

J=dir1/*.java dir2/*.java dir3/*.java ...
export J

然后我得到环境太大的错误

通常我使用一次编译一个目录(包)的makefile树,但有时关系变化太混乱所以我这样做:

javac $J

重新编译全部。

问题:我可以做点什么来引用列表,比如

J="dir1/*.java dir2/*.java dir3/*.java ..."
export J

使环境小,但有变量在使用时扩展文件名列表。

我知道我可以

javac `eval ls $J`

但我希望调用仍然很简单。

你可能想要

J=(dir1/*.java dir2/*.java dir3/*.java ...)

(不需要 export,因为 .zshrc 是来源)。设置 J 后,您可以简单地 运行

javac $J

或更明确(有或没有大括号)

javac ${J[@]}

是否需要引号取决于您启用了哪些 shell 选项,但在 zsh.

中默认不需要引号