Bash脚本使用-e判断目录存在时无法找到目标文件夹
问题分析与解决
核心问题
脚本路径判断失败的根源是双引号包裹的~不会被Shell解析为用户主目录,而是被当作普通字符串字符。也就是说,[[ -e "~/.local/share/folder/$2/" ]]实际上检查的是当前工作目录下名为~的文件夹内的路径,而非你的真实用户主目录/home/lost/.local/share/folder/menu/。
解决方案
你可以通过三种方式修复路径解析问题:
1. 去掉路径的双引号
让~直接暴露给Shell解析:
if [[ -e ~/.local/share/folder/$2/ ]]
2. 用$HOME代替~
$HOME在双引号内会正常展开为用户主目录(推荐这种写法,同时保留双引号避免路径含空格时出错):
if [[ -e "$HOME/.local/share/folder/$2/" ]]
3. 把~放在双引号外面
如果需要保留部分内容的双引号包裹,可以拆分写法:
if [[ -e ~"/.local/share/folder/$2/" ]]
补充说明
- 你尝试用
-f或-d没用,是因为路径本身解析错误,Shell找不到这个不存在的字面路径,无论用哪个文件判断运算符都会返回假。 - 脚本中打开文件的语句
$EDITOR ~/.local/share/folder/$2也存在同样的~解析问题,建议同步修改,避免后续出错。
修改后的完整脚本示例(含优化):
if [[ $1 == "edit" ]] then if [[ $2 == "" ]] then echo "Error: You need to enter a playlist name." exit fi if [[ -d "$HOME/.local/share/folder/$2/" ]] then "$EDITOR" "$HOME/.local/share/folder/$2" else echo "Error: No playlist called $2 exists." fi fi
优化点说明:
- 用
-d代替-e,明确检查文件夹,判断更精准。 - 给
$EDITOR和路径都添加双引号,防止变量含空格或特殊字符时出现异常。
内容的提问来源于stack exchange,提问作者user18246417
相关产品推荐
相关产品推荐

