〜は$ HOMEですが、時々ですか?


14

cd〜

と同じことをする

cd $HOME

これも同じです

cd /home/tandu

しかしながら、

cd ~not-tandu

への変更 /home/not-tandu

これは純粋に構文上の選択ですか?これはカーネル(またはcd実行可能ファイル)によってどのように扱わ~れますか?それは言うことです、~/~同じディレクトリに変更しますが、~a1つのディレクトリアップです。変更する他のディレクトリについても同じことは言えません。


3
〜not-tanduと〜/ not-tanduを自由に比較してください。1つはユーザーのnot-tanduホームディレクトリを指し、もう1つはhomedirのdir not-tanduを指します。
ヨハン

4
これはカーネルや「cd実行可能ファイル」ではありません(そのようなものは存在しないためです)。これは組み込みのシェルです。
ポールトンブリン

あなたがそれを言及しないので:cdパラメータなしでのように動作しますcd ~。で置き換えるcdecho、式がシェルによって展開されるものを確認できます。
ジョフェル

回答:


18

~$HOME多くのシェルによって提供されるエイリアスですが、$HOMEより普遍的です。 $HOME実際に環境変数HOMEをここに挿入(置換)するようシェルに要求します。置換できる環境変数はかなりありenvます。リストを実行してみてください。~単語の先頭にない場合、常に認識されるとは限らないことに注意してください。比較のために次の2つのコマンドを試してください。

ls /~
ls /$HOME

最初の実行可能ファイルとしてLSに渡される/~、その後というファイルを見しようとしている~ルートディレクトリでは、第2膨張する$HOMEとなると//home/user、次に実行可能なコマンドライン引数としてLSに渡されます。すべてのPOSIXシステム(POSIXはUNIXおよびLinuxシステムの動作方法の標準です)では、複数のスラッシュを1つのスラッシュと同じように扱うことができるため//home/user、と同じ/home/userです。 ~usernamepasswdファイルでユーザー名を検索してホームディレクトリを返すようにシェルに指示するためのショートカットです。同等の環境変数はありません。これらの置換はすべてシェルによって行われ、それらのほとんどでサポートさ$HOMEれていますが、すべてのシェルでサポートされることが保証されているのは環境変数のみです。また、cd実際には組み込みコマンドです。これは、シェル自体にディレクトリを変更するよう指示する特別なディレクティブです。echoシェルプロセスの基本的な属性を変更するために使用されるため、別の実行可能ファイルとして実装できる他のシェルビルトインとは異なります。 echoは、パフォーマンス上の理由から組み込みのシェルにすぎませんが、UNIXの古き良き時代では、独自の実行可能ファイルとしてのみ利用可能/bin/echoでした。


re "次に、ルートディレクトリにある〜というファイルを検索しようとします"; それはすべてのUnixフレーバーのものですか?
ペーステリア

17

~foo 「ユーザーfooのホームディレクトリ」を意味します。

これはカーネルによって行われるのではなく、シェルによって解釈されます。シェルは~foo、引数と見なすたびに、ユーザーのホームディレクトリに透過的に置き換えfooて、その場所に渡します。したがって、実行するcd ~tanduと、シェルは実際に実行されcd /home/tanduます。


1
この置換と具体的なアルゴリズムは何ですか?それであるcdかのシェル?シェルを実行していない場合はどうなりますか?それは単純な「〜の後に何かが続く場合、異なる展開をしますか?」または、このユニークな状態に対して他の特別な処理がありますか?
爆発薬

8
Tilde ExpansionのBashマニュアルを参照してください。(他の多くのシェルおよびプログラムは同様の規則に従います。)
cjm

4
@tandu:シェルはないcd、それを行うには外部実行可能ファイル(それが可能ではないでしょう)がありません
マット

1
@tandu:シェルを実行していない場合(たとえばを使用してこれを試すexec(2))、シェルの展開は行われません。シェルを展開~しないと、何にも置き換わりません。これは、まったく別の完全に有効なキャラクターです。これは、SunOSの初期の頃に私を/bin/sh噛みつきました~
アレクシオス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.