在Swift中,abbreviatingWithTildeInPath
创建“一个新字符串,用波浪号(~)字符替换当前路径的当前主目录部分”。换句话说,它将/Users/username/Desktop/
转换为~/Desktop
。
在Ruby中,我们可以用File.expand_path
来做相反的事情:
File.expand_path('~/Desktop')
# => /Users/username/Desktop/
但是似乎没有本地的方法来用波浪号来表示路径。我是通过以下方式实现的:
'/Users/username/Desktop/'.sub(/^#{ENV['HOME']}/, '~')
这似乎是可靠的工作,但有什么缺陷,我错过了吗?或者更好的是,有没有一个原生的方法?
1条答案
按热度按时间tjrkku2a1#
你的方法有几个微妙的问题
Dir.home
是获取主目录的更可靠的方法,以防脚本在奇怪的环境中运行1.主目录名称可以包含正则表达式特殊字符,即
.
,这可能会导致正则表达式中的误报。使用Regexp.escape
固定1.路径可以是 only 没有尾随斜杠的主目录。修复了字符串结尾或分隔符的正向前看
^
和$
将找到匹配的 * 第一行 *,而不仅仅是字符串的开头。使用\A
和\Z
修复,但实际上您永远不应该向此方法传递多行字符串。