我希望能够在 bash 脚本中运行 7z.exe,但我的脚本No such file or directory
在 7z 路径定义处触发:
#declare 7zip path
7zip="/c/Program\ Files/7-Zip"
#call it
$7zip/7z x ./$filename -o$extract_folder
我从这篇文章中尝试过:
7zip_exe="$(find /c/Program\ Files/7-Zip -name 7z.exe | head -n 1)"
这也导致了No such file or Directory
。
当我在 Git bash (MINGW64) 中调查时,我可以轻松转到 7-Zip 文件夹:
<user> MINGW64 /d/workdir
$ cd /c/Program\ Files/7-Zip/
<user> MINGW64 /c/Program Files/7-Zip
$ ls
7-zip.chm 7z.dll* 7zCon.sfx* History.txt descript.ion
7-zip.dll* 7z.exe* 7zFM.exe* Lang/ readme.txt
7-zip32.dll* 7z.sfx* 7zG.exe* License.txt
但是当我想将其解析为变量时,空间被解释为路径切割:
<user> MINGW64 /d/workdir
$ t="/c/Program\ Files/7-Zip"
<user> MINGW64 /d/workdir
$ ls $t
ls: cannot access '/c/Program\': No such file or directory
ls: cannot access 'Files/7-Zip': No such file or directory
但这有效:
<user> MINGW64 /d/workdir/NX2506
$ t="$(/c/Program\ Files/7-Zip)"
bash: /c/Program Files/7-Zip: Is a directory
并ls /c/Program\ Files/7-Zip
显示7z.exe
。
我错过了什么?
使用双引号或转义空格来定义变量。不能同时使用两者。
因此
或者
然后使用双引号将变量引起来:
此外,变量名必须以字母开头。请参阅Bash 参考手册中 name 的定义: