web-dev-qa-db-ja.com

〜/はどのように機能しますか?

ターミナルで、ホームを参照する1つの方法は、~/を使用することです。 file ~/の出力は次のとおりであるため、これがどのように機能するのか理解できません。

/home/admin/: directory

~/を実行すると、次の結果になります。

-bash: /home/admin/: Is a directory

~//home/adminに変換するものは何ですか?

~//bin/dashでも動作するように見えるので、bash固有ではないこともわかっています。

10
NerdOfLinux

これは チルダ展開 です。

ティルド展開は POSIX最初のリンク先ページ を参照)で必要であり、最新のすべての Bourneスタイルのシェル に表示されます。これには、一般的なシェルbashksh93、およびzshが含まれますが、mkshdash、およびbusybox ashなどのよりミニマルなシェルも含まれます。

実際には、異なるPOSIX互換シェルは、HOMEが使用されるが未設定または空である不特定の場合と、ユーザーのホームを拡張する以外の目的で~表記を使用できるようにする場合の両方で、チルダ展開の正確な詳細が異なる場合がありますディレクトリ。たとえば、 bashのチルダ展開 は、それぞれ~-および~+を使用して、PWDおよびOLDPWD変数の値にアクセスするための省略形も提供します。

ただし、典型的なケースでは、Bourneスタイルのシェル全体でほぼ同じように機能します。これらは典型的なケースです(ただし、separatingのこの方法は公式ではないことに注意してください、それは単に資料を提示する私の方法です):

  • ~または~/自体がホームディレクトリに展開されます。
  • ~/の後にさらにパスコンポーネントが続くと、ホームディレクトリから始まるパスに展開されます。
  • ~usernameまたは~username/は、ユーザー名がusernameであるユーザーのホームディレクトリに展開されます。
  • ~username/に続くパスコンポーネントは、ユーザー名がusernameであるユーザーのホームディレクトリから始まるパスに展開されます。
15
Eliah Kagan

~$HOMEの「速記」です

~は、$HOMEを言い換えると、ホームディレクトリに書き込む「速記」方法です。シェル(例:bash)で動作し、「チルダ展開」と呼ばれます。

末尾にスラッシュを追加すると、ディレクトリについて話していることを意味します。

例:

$ ls -d ~/
/home/sudodus/
$ ls -d ~
/home/sudodus
$ ls -d $HOME
/home/sudodus

$ Sudo -i
[Sudo] lösenord för sudodus: 
# ls -d ~/
/root/
# ls -d ~
/root
# exit
logout

$ ls xournal.png
xournal.png

$ LANG=C ls xournal.png/
ls: cannot access 'xournal.png/': Not a directory
5
sudodus