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() {
# Usage: dirname "path"
dir=${1%%/}
dir=${dir%/*}
[[ $dir ]] || dir=//
[[ $dir == */* ]] || dir=.
[[ $1 == */* ]] || dir=.
printf '%s\n' "${dir%/*}"
printf '%s\n' "${dir:-/}"
}
```

View File

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

14
test.sh
View File

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