Windows下JAVA_HOME绝不能加双引号,否则导致Java工具链失效;Linux/macOS中export赋值需用引号包裹含空格路径,但变量值本身不含引号;PATH拼接时禁止对变量额外加引号。

路径双引号漏了本身不是问题,真正出错的是你**不该加的地方加了**,或者**该加却加在了错误位置**——尤其是 Windows 系统下,JAVA_HOME 里写上英文双引号,反而会让几乎所有 Java 工具链失效。
Windows 系统:JAVA_HOME 绝对不能带引号
系统级环境变量(如 JAVA_HOME)在 Windows 中不支持用双引号包裹路径。哪怕你写了 "C:\Program Files\Java\jdk-17",系统会原样保存并透传给子进程,而 java.exe、javac.exe 或 Maven 启动脚本根本不会主动去掉这层引号,结果就是路径变成带引号的字符串,JVM 去找 "C:\Program 这个目录,自然报“不是内部或外部命令”。
- ✅ 正确写法(无引号):
C:\Program Files\Java\jdk-17.0.1 - ❌ 错误写法(带引号):
"C:\Program Files\Java\jdk-17.0.1" - 验证方式:CMD 中运行
echo %JAVA_HOME%,输出必须干净、无引号、无乱码
Linux/macOS:export 语句中变量值要加引号,但 JAVA_HOME 本身不存引号
Shell 脚本(如 .bashrc 或 .zshrc)里用 export 赋值时,如果路径含空格,必须用双引号包裹整个值,否则 shell 会把空格当分隔符截断。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- ✅ 正确:
export JAVA_HOME="/opt/java/jdk 21" - ❌ 错误:
export JAVA_HOME=/opt/java/jdk 21(shell 把21当作独立命令执行) - 注意:引号只出现在
export命令中,JAVA_HOME 变量的值本身不含引号;后续引用$JAVA_HOME/bin时也不再额外加引号
PATH 中不要对变量再套引号
无论 Windows 还是类 Unix 系统,PATH 拼接时都禁止对已定义的变量加引号。比如 Windows 的 %JAVA_HOME%\bin 或 Linux 的 $JAVA_HOME/bin,外面不能再包一层引号。
立即学习“Java免费学习笔记(深入)”;
- ✅ 正确(Windows):
%JAVA_HOME%\bin - ❌ 危险(Windows):
"%JAVA_HOME%\bin"→ 引号成为路径字面量的一部分 - ✅ 正确(Linux):
export PATH="$JAVA_HOME/bin:$PATH" - ❌ 危险(Linux):
export PATH="$JAVA_HOME/bin:$PATH"(外层再加双引号)→ PATH 实际变成"$JAVA_HOME/bin:$PATH"字符串
更稳妥的解法:避开空格和特殊字符
与其反复调试引号,不如从源头规避。安装 JDK 时手动指定路径,选一个干净的目录:
- 推荐路径示例:
C:\jdk-17、D:\java\jdk-21、/opt/jdk-17 - 务必避开:
Program Files、Program Files (x86)、中文路径、括号()、&、!、^等 - 这样配置 JAVA_HOME 和 PATH 就完全不用考虑引号,一劳永逸

















