Re: Bash: Zeichen maskieren(=?iso-8859-1?q?sch=FCtzen?=)
achim mueller wrote:
~$: echo \~~ gibt jedoch "~~" aus.
~$: echo ~~ gibt ebenfalls "~~" aus.
Kann mir das jemand erklären? Schützt die Tilde sich selbst und das nächste Zeichen?
Nein, aber sie hat ihre Sonderbedeutung nur am Wortanfang (hinter einem Leerzeichen[1] oder hinter '='), und die auch nur dann, wenn es "sinnvoll" weitergeht. Sinnvoll ist das Ersetzen von '~' durch das Home-Verzeichnis im allgemeinen dann, wenn dahinter irgendwas kommt, was eine Pfadkomponente abschließt, also entweder ein '/' oder ein Leerzeichen.[2] Wenn die Ersetzung von '~' nach diesen Kriterien sinnvoll ist, wird die Tilde einfach durch den Wert der Umgebungsvariablen HOME ersetzt, also genau so, als ob an dieser Stelle statt der Tilde $HOME gestanden hätte. Für die Ersetzung von ~USERNAME gelten im Prinzip die gleichen Kriterien bezüglich der Begrenzung. Aber wie jemand anderes bereits geschrieben hat, findet die Ersetzung nur statt, wenn USERNAME ein tatsächlich existierender Benutzer ist. Das geht auch gar nicht anders, denn ~USERNAME soll ja nicht stumpf durch den Text /home/USERNAME ersetzt werden, sondern bitteschön durch das Home-Verzeichnis des bezeichneten Benutzers -- egal, wie dessen Name aufgebaut ist.[3] Also wird der Wert, durch den ~USERNAME ersetzt wird, aus dem Home-Verzeichnis-Feld des passwd-Eintrags von USERNAME geholt, und das ist natürlich schlicht und einfach unmöglich, wenn der Benutzer USERNAME nicht existiert. Eilert Footnotes: [1] Wobei Leerzeichen hier neben einem einfachen Space auch ein Tabulator oder Zeilenumbruch sein kann. [2] In manchen Zusammenhängen werden auch Doppelpunkte als geeignete Trennzeichen betrachtet. [3] Schließlich soll ja z.B. ~root (zumindest auf den meisten Linux-Systemen) zu /root und nicht etwa zu /home/root werden. -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Eilert Brinkmann -- Universitaet Bremen -- FB 3, Informatik eilert@informatik.uni-bremen.de - eilert@tzi.org http://www.informatik.uni-bremen.de/~eilert/
participants (1)
-
Eilert Brinkmann