#!/bin/dash -vx trim() { # remove leading whitespace characters __trim="${*#${*%%[![:space:]]*}}" # remove trailing whitespace characters printf "%s" "${__trim%${__trim##*[![:space:]]}}" } trim " alpha" | od -t x1a + trim alpha + __trim= + printf %s + od -t x1a 0000000 trim "beta " | od -t x1a + trim beta + __trim= + printf %s + od -t x1a 0000000 trim " gamma " | od -t x1a + trim gamma + __trim= + printf %s + od -t x1a 0000000 trim2() { # remove leading whitespace characters __trim="${*##[[:space:]]}" # remove trailing whitespace characters printf "%s" "${__trim%%[[:space:]]}" } trim2 " alpha" | od -t x1a + trim2 alpha + __trim= alpha + printf %s alpha + od -t x1a 0000000 20 61 6c 70 68 61 sp a l p h a 0000006 trim2 "beta " | od -t x1a + trim2 beta + __trim=beta + printf %s beta + od -t x1a 0000000 62 65 74 61 20 b e t a sp 0000005 trim2 " gamma " | od -t x1a + trim2 gamma + __trim= gamma + printf %s gamma + od -t x1a 0000000 0d 67 61 6d 6d 61 09 cr g a m m a ht 0000007 trim3() { _space="$(echo -n '[\b\t\n\v\f\r ]')" # remove leading whitespace characters __trim="${*##$_space}" # remove trailing whitespace characters printf "%s" "${__trim%%$_space}" } trim3 " alpha" | od -t x1a + trim3 alpha + od -t x1a + echo -n [\b\t\n\v\f\r ] + _space=[ ] + __trim=alpha + printf %s alpha 0000000 61 6c 70 68 61 a l p h a 0000005 trim3 "beta " | od -t x1a + trim3 beta + od -t x1a + echo -n [\b\t\n\v\f\r ] + _space=[ ] + __trim=beta + printf %s beta 0000000 62 65 74 61 b e t a 0000004 trim3 " gamma " | od -t x1a + trim3 gamma + od -t x1a + echo -n [\b\t\n\v\f\r ] + _space=[ ] + __trim=gamma + printf %s gamma 0000000 67 61 6d 6d 61 g a m m a 0000005