bible: really fix dirname

This commit is contained in:
Dylan Araps
2019-09-19 17:06:26 +03:00
parent 4a6b172ba1
commit 49bd538c26
3 changed files with 19 additions and 7 deletions

View File

@@ -1067,11 +1067,11 @@ Alternative to the `dirname` command.
dirname() { dirname() {
# Usage: dirname "path" # Usage: dirname "path"
dir=${1%%/} dir=${1%%/}
dir=${dir%/*}
[[ $dir ]] || dir=// [[ $1 == */* ]] || dir=.
[[ $dir == */* ]] || dir=.
printf '%s\n' "${dir%/*}" printf '%s\n' "${dir:-/}"
} }
``` ```

View File

@@ -10,11 +10,11 @@ Alternative to the `dirname` command.
dirname() { dirname() {
# Usage: dirname "path" # Usage: dirname "path"
dir=${1%%/} dir=${1%%/}
dir=${dir%/*}
[[ $dir ]] || dir=// [[ $1 == */* ]] || dir=.
[[ $dir == */* ]] || dir=.
printf '%s\n' "${dir%/*}" printf '%s\n' "${dir:-/}"
} }
``` ```

14
test.sh
View File

@@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# shellcheck source=/dev/null # shellcheck source=/dev/null disable=2178,2128
# #
# Tests for the Pure Bash Bible. # Tests for the Pure Bash Bible.
@@ -117,6 +117,18 @@ test_count() {
test_dirname() { test_dirname() {
result="$(dirname "/home/black/Pictures/Wallpapers/1.jpg")" result="$(dirname "/home/black/Pictures/Wallpapers/1.jpg")"
assert_equals "$result" "/home/black/Pictures/Wallpapers" assert_equals "$result" "/home/black/Pictures/Wallpapers"
result="$(dirname "/")"
assert_equals "$result" "/"
result="$(dirname "/foo")"
assert_equals "$result" "/"
result="$(dirname ".")"
assert_equals "$result" "."
result="$(dirname "/foo/foo")"
assert_equals "$result" "/foo"
} }
test_basename() { test_basename() {