
私は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'
'(' マークは 1 行に 1 回だけ表示されます。
:/mnt/c/Program Files(x86)/Common Files/Oracle/Java/javapath:
。なぜこのようなエラーが発生するのかわかりません。この問題を解決するにはどうすればよいですか?そのままにすると、そのパス変数にどのような影響がありますか?
答え1
シェル構文の場合、エスケープや引用なしで指定された値の一部として表示できない(
特殊文字(例:など)。;
たとえば、サブシェルの起動に使用されますが、ご存知のように、ほとんどの場合、構文エラーが発生します。 (たとえば、コマンドを自動的に終了するのとは異なります。)>
&
&
しかし、角括弧だけが問題ではなく、パスにスペースもあります。これは構文エラーではありませんが、コマンドの意味を変更します。はに割り当てて名前付き変数をエクスポートすること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\)/