はい、呼び出すことができるほとんどのものは、そのイディオムを通過したパスを想定しています。シェルでそのようなパスを使用する場合 (たとえば、 のようなことを行う場合cat ~raxacoricofallapatorius/foo.txt
)、パスの正規化を行うのは、実行する他のプログラムではなく、シェル自体です。cat
これは簡単に確認できます-たとえば、
lvc@tiamat:~/Projects$ echo ~
/home/lvc
したがって、これらの種類の変数を入力としてパスを取得することが予想される場合は、自分で前処理を行う必要があることを意味します。別の方法は、シェルを介してコマンドを実行し、発生するすべての問題に対処する準備を整えることです。
ただし、少なくとも UNIX ライクなシステム (Windows は同じように動作する場合とそうでない場合があります) では、これを実行する必要はありません。これらはシステム コールによって理解され、シェルはそれらを変換しません。例えば:.
..
lvc@tiamat:~/Projects$ file ..
..: directory
lvc@tiamat:~/Projects$ file ~
/home/lvc: directory
file
は変更されて..
いませんが、 の展開された形式が表示されていることに注意してください~
。
これは、外部プログラムで直接機能するパスだけが必要なexpanduser
場合expandvars
は、それをパススルーするだけで十分であることを意味します。abspath
呼び出すプログラムが自分の作業ディレクトリとは異なる作業ディレクトリで実行される場合は、主に呼び出す必要があります。