Ich möchte nur den Namen des übergeordneten Verzeichnisses für eine Datei erhalten.
Beispiel: Wenn ich habe path=/a/b/c/d/file
, möchte ich nur d
und nicht /a/b/c/d
(was ich von dirname $path
) als Ausgabe.
Gibt es eine ausgefeilte Möglichkeit, dies zu tun?
dirname
Befehl davon aus, dass er sich im aktuellen Verzeichnis befindet (auch bekannt als ".").parentname="$(basename "$(dirname "$pwd")")"
PWD
müssen großgeschrieben werden. Versuchen Sie esparentname="$(basename "$(dirname "$PWD")")"
.Sie können pwd verwenden, um das aktuelle Arbeitsverzeichnis abzurufen, und die Parametererweiterung verwenden , um zu vermeiden, dass es in eine andere (Unter-) Shell eingebunden wird.
Edit: Bewährte Quelle
quelle
${path##*/}
Ich halte dies für eine ressourcenschonende Lösung:
bearbeiten: Sorry, geschachtelte Erweiterung ist in Bash nicht möglich, aber es funktioniert in Zsh. Bash-Version:
quelle
filepath=file
oder filepath = / file`.foofile
? Ob es nicht der vollständige Pfad ist, kann ich nicht wissen (vielleichtfoofile
handelt es sich bei einer vorhandenen Datei nicht nur um eine "Zeichenfolge").In Bash, in einer Zeile:
quelle
Die Antwort von Julian67 gefällt mir am besten, aber hier ist eine etwas erweiterte Version:
quelle