我使用适用于 Linux 的 Windows 子系统。启动 Ubuntu 时,我收到以下错误:
-bash: /home/divyansh/.bashrc: line 119: syntax error near unexpected token `('
-bash: /home/divyansh/.bashrc: line 119: `export PATH=/mnt/z/usr/local/bin:/mnt/z/usr/local/bin:/home/divyansh/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2020.424.0_x64__79rhkp1fndgsc:/mnt/c/Python38/Scripts:/mnt/c/Python38:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Program Files/Intel/WiFi/bin:/mnt/c/Program Files/Common Files/Intel/WirelessCommon:/mnt/c/MinGW/bin:/mnt/c/ProgramData/pbox:/mnt/c/Program Files/nodejs:/mnt/c/ProgramData/chocolatey/bin:/mnt/c/Program Files/Git/cmd:/mnt/c/Users/asus/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/asus/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin:/mnt/c/tools:/mnt/c/Users/asus/AppData/Roaming/npm:/mnt/c/Users/asus/AppData/Local/atom/bin:/snap/bin'
'(' 标记在行中仅出现一次
:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:
。我不明白为什么会导致这个错误。我可以做什么来清除这个?如果我保持原样,它会如何影响相应的路径变量?
答案1
对于 shell 语法,(
是一个特殊字符(如、;
等),如果不进行转义或引用,它不能作为指定值的一部分出现。例如,它用于启动子 shell,但正如您所注意到的,在大多数情况下它只会导致语法错误。 (不像,比如说,它只是默默地结束命令。)>
&
&
然而,括号并不是唯一的问题,路径中还有空格。这不是语法错误,但改变了命令的含义。export PATH=/mnt/c/Program Files/Somepath
意味着分配/mnt/c/Program
给PATH
,并导出一个名为 的变量Files/Somepath
,这也会导致错误,因为斜杠在变量名中无效。
您需要转义所有括号和空格,如 中Program\ Files\ \(x86\)
,或者简单地引用整个字符串:
PATH='/mnt/z/usr/local/bin:...:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:...'
或者只是其中的一部分,尽管这可能更难阅读:
PATH=/mnt/z/usr/local/bin:...:'/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath':...
(请注意,您不能在彼此内部同时执行这两项操作,PATH='/mnt/c/Program\ Files\ \(x86\)/...'
而是分配一个包含文字反斜杠的字符串。)
答案2
\
在每个括号前添加转义字符:
Program Files \(x86\)/