在 mac 执行一个命令时
java -cp .:/release/bin/../conf:/release/bin/../lib/* com.ex.TestApplication
发现报错
zsh: no matches found: .:/release/bin/../conf:/release/bin/../lib/*
那么这是一个什么样的状况呢?
起因是在 Zsh 终端中,通配符(例如 *)默认是开启的,这可能导致 java 命令中的类门路无奈正确解析,能够通过执行 setopt +o nomatch 命令来禁用通配符,然而,如果脚本中增加了这一行,在 linux 环境下,又无奈执行,怎么办呢?
if ["$SHELL" = "/bin/zsh"]; then
echo "以后 Shell 解释器为 Zsh"
setopt +o nomatch
fi
能够通过上述代码来实现,在上述代码中,通过查看 $SHELL 环境变量的值是否为 /bin/zsh 来判断以后 Shell 是否为 Zsh。当然,这个办法实用于大多数状况,但不是百分百精确的。