From 4d14f5446fb4f4c69ddb121e3d3bca6026f4ac78 Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Sun, 22 Sep 2019 14:25:57 +0300 Subject: [PATCH] bible: better dirname function --- README.md | 21 +++++++++++++++------ manuscript/chapter5.txt | 21 +++++++++++++++------ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index d1f284a..79ca77a 100644 --- a/README.md +++ b/README.md @@ -1070,15 +1070,24 @@ Alternative to the `dirname` command. ```sh dirname() { # Usage: dirname "path" - dir=${1:-.} - dir=${dir%%${dir##*[!/]}} + local tmp=${1:-.} - [[ "${dir##*/*}" ]] && dir=. + [[ $tmp != *[!/]* ]] && { + printf '/\n' + return + } - dir=${dir%/*} - dir=${dir%%${dir##*[!/]}} + tmp=${tmp%%"${tmp##*[!/]}"} - printf '%s\n' "${dir:-/}" + [[ $tmp != */* ]] && { + printf '.\n' + return + } + + tmp=${tmp%/*} + tmp=${tmp%%"${tmp##*[!/]}"} + + printf '%s\n' "${tmp:-/}" } ``` diff --git a/manuscript/chapter5.txt b/manuscript/chapter5.txt index 09282b2..7076641 100644 --- a/manuscript/chapter5.txt +++ b/manuscript/chapter5.txt @@ -9,15 +9,24 @@ Alternative to the `dirname` command. ```sh dirname() { # Usage: dirname "path" - dir=${1:-.} - dir=${dir%%${dir##*[!/]}} + local tmp=${1:-.} - [[ "${dir##*/*}" ]] && dir=. + [[ $tmp != *[!/]* ]] && { + printf '/\n' + return + } - dir=${dir%/*} - dir=${dir%%${dir##*[!/]}} + tmp=${tmp%%"${tmp##*[!/]}"} - printf '%s\n' "${dir:-/}" + [[ $tmp != */* ]] && { + printf '.\n' + return + } + + tmp=${tmp%/*} + tmp=${tmp%%"${tmp##*[!/]}"} + + printf '%s\n' "${tmp:-/}" } ```