Techioz Blog

チルダ文字へのパスでホームフォルダーを折りたたむ

概要

Swift では、abbreviatingWithTildeInPath により、「現在のパスの現在のホーム ディレクトリ部分をチルダ (~) 文字で置き換える新しい文字列」が作成されます。つまり、/Users/username/Desktop/ が ~/Desktop に変わります。

Ruby では、File.expand_path を使用してその逆を行うことができます。

File.expand_path('~/Desktop')
# => /Users/username/Desktop/

しかし、チルダを使用してパスを省略するネイティブな方法はないようです。私は次のようにしてそれを達成しています:

'/Users/username/Desktop/'.sub(/^#{ENV['HOME']}/, '~')

確実に機能しているように見えますが、何か見落としている欠陥はありますか?あるいはさらに良いことに、ネイティブ メソッドはありますか?

解決策

あなたのアプローチにはいくつかの微妙な問題があります

def File.collapse_path path
  path.sub /\A#{Regexp.escape Dir.home}(?=\Z|#{File::SEPARATOR})/, ?~
end