Es besteht keine Notwendigkeit für basename und insbesondere keine Notwendigkeit für eine Subshell, in der pwd ausgeführt wird (was ein zusätzlicher und teurer Gabelvorgang ); die Shell kann dies intern mit Parametererweiterung :
result=${PWD##*/} # to assign to a variable
printf '%s\n' "${PWD##*/}" # to print to stdout
# ...more robust than echo for unusual names
# (consider a directory named -e or -n)
printf '%q\n' "${PWD##*/}" # to print to stdout, quoted for use as shell input
# ...useful to make hidden characters readable.
Beachten Sie, dass Sie diese Technik auch in anderen Situationen anwenden können (nicht PWD
, sondern eine andere Variable, die einen Verzeichnisnamen enthält), müssen Sie eventuell nachfolgende Schrägstriche abschneiden. Im Folgenden wird die Bash-Funktion extglobale Unterstützung auch bei mehreren Schrägstrichen am Ende funktioniert:
dirname=/path/to/somewhere//
shopt -s extglob # enable +(...) glob syntax
result=${dirname%%+(/)} # trim however many trailing slashes exist
result=${result##*/} # remove everything before the last / that still remains
printf '%s\n' "$result"
Alternativ dazu, ohne extglob
:
dirname="/path/to/somewhere//"
result="${dirname%"${dirname##*[!/]}"}" # extglob-free multi-trailing-/ trim
result="${result##*/}" # remove everything before the last /