2

我需要能够删除与任何用户系统的 Documents 文件夹相关的目录。

rmdir: ~/Documents/Folder: No such file or directory

如果我手动输入扩展路径(/Users/ricky/Documents/Folder),它工作正常。

我认为 bash 会自动扩展路径开头的波浪号?

更新:

在按照建议尝试了一堆不同的方法之后,我现在非常有信心,问题在于我如何存储路径。我从逐行读取的文本文件中获取路径:

...
export_folder_path="$(echo $line | cut -f2 -d=)"
...

echo $export_folder_path
rmdir $export_folder_path
rmdir "$HOME/Documents/Folder\ 1"

这将输出以下内容:

$HOME/Documents/Folder\ 1
rmdir: $HOME/Documents/Folder\ 1: No such file or directory
rmdir: /Users/ricky/Documents/Folder\ 1: Directory not empty (This is actually what I want)

我无法弄清楚手动输入导出路径和使用变量之间的区别。为什么变量拒绝扩展$HOME?我尝试了许多添加引号的变体,但都没有运气。

4

1 回答 1

3

波浪号扩展并非在所有情况下都有效。您可以改为使用该HOME变量:

rmdir $HOME/Documents/Folder

来自bash 手册

波浪号扩展 如果单词以不带引号的波浪号字符 ('~') 开头,则第一个不带引号的斜杠之前的所有字符(或所有字符,如果没有不带引号的斜杠)都被视为波浪号前缀。如果波浪号前缀中没有任何字符被引用,波浪号后面的波浪号前缀中的字符将被视为可能的登录名。如果此登录名是空字符串,波浪号将替换为 shell 参数 HOME 的值。如果 HOME 未设置,则替换执行 shell 的用户的主目录。否则,波浪号前缀将替换为与指定登录名关联的主目录。

如果波浪号前缀是 '~+',则 shell 变量 PWD 的值将替换波浪号前缀。如果波浪号前缀是 '~-',那么 shell 变量 OLDPWD 的值(如果已设置)将被替换。如果波浪号前缀中波浪号后面的字符由数字 N 组成,可选前缀为“+”或“-”,波浪号前缀将替换为目录 st 中的相应元素,因为它将显示通过使用波浪号前缀作为参数调用的 dirs 内置函数。如果波浪号前缀中波浪号后面的字符由没有前导“+”或“-”的数字组成,则假定为“+”。

如果登录名无效,或者波浪号扩展失败,则单词不变。

于 2016-12-26T10:54:51.460 回答