You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:47:12