bash で '~' を変換するにはどうすればよいですか?

bash で '~' を変換するにはどうすればよいですか?

一部のプログラムでは、ファイル名のチルダ ショートカットが認識されず、/home/dave/myfile.txtの代わりになどの完全な正規パスが想定されます~/myfile.txt

チルダが使用されるたびに~、bash で完全な正規パスに置き換える方法はありますか?~user

答え1

まあ、perl についてはよくわかりませんが、bash スクリプトでは eval を使用してその変換を行うことができます。

eval dir='~user/somedir'

$dir には完全なパス (つまり、この時点では /home/user/somedir) が含まれます。

答え2

Bash シェルで次のようにコマンドを実行すると、

command ~/myfile.txt

シェルは最初に~(引用符で囲まれていない限り)を展開し、その結果を使用してコマンドを実行します。

しかし、一部のプログラムは を解釈しないのは事実です~。たとえば、次のようになります。

$ cat "~/myfile.txt"
~/myfile.txt: No such file or directory

しかし、代わりにこれが機能します:

nano "~/myfile.txt"

しかし、この動作はBashの拡張によって隠されているため、それ以上の解釈は必要ありません

明らかなことかもしれませんが、プログラムが設定ファイルを使用し、その中にいくつかのパスを期待している場合、それらを展開するのは Bash の役割ではないことに注意してください。

関連情報