ホームディレクトリに-fがある場合bash

ホームディレクトリに-fがある場合bash

指定されたパスがファイルまたはディレクトリを指していることを確認しようとしています。次のコードでこれを試しました。

#if $mypath is a file
if [[ -f $mypath ]]; then

そして

#if mypath is a directory
if [[ -d $mypath ]]; then

両方のフラグメントは、与えられたパスが絶対パス(たとえば/home/user/mydir/...)の場合にうまく機能します。ただし、指定されたパスが ~ で始まる場合 (たとえば ~/mydir/...)、両方のフラグメントは true を返します。 pathはファイルまたはディレクトリを指します。

私が何を見逃しているのか、それとも可能かを知っている人はいますか?

ベストアンサー1

問題を発見しました。

問題は、設定ファイルからパスを取得しているため、パスが文字列として保存されることです。これにより、チルダが拡張されない、これが問題の原因です。私の解決策は、チルダを$ HOMEに手動で置き換えることでした。 $ HOMEはパスが引用されても拡張されます。だから基本的に:

mypath="${mypath/#\~/$HOME}"
#if $mypath is a file
if [[ -f $mypath ]]; then

おすすめ記事