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
.
中默认不需要引号
我有一个 (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
.