1#
2# substr -- a function to emulate the ancient ksh builtin
3#
4
5# -l == remove shortest from left
6# -L == remove longest from left
7# -r == remove shortest from right (the default)
8# -R == remove longest from right
9
10substr()
11{
12	local flag pat str
13	local usage="usage: substr -lLrR pat string or substr string pat"
14	local options="l:L:r:R:"
15
16	OPTIND=1
17	while getopts "$options" c
18	do
19		case "$c" in
20		l | L | r | R)
21			flag="-$c"
22			pat="$OPTARG"
23			;;
24		'?')
25			echo "$usage"
26			return 1
27			;;
28		esac
29	done
30
31	if [ "$OPTIND" -gt 1 ] ; then
32		shift $[ $OPTIND -1 ]
33	fi
34
35	if [ "$#" -eq 0 ] || [ "$#" -gt 2 ] ; then
36		echo "substr: bad argument count"
37		return 2
38	fi
39
40	str="$1"
41
42        #
43        # We don't want -f, but we don't want to turn it back on if
44        # we didn't have it already
45        #
46        case "$-" in
47        "*f*")
48                ;;
49        *)
50                fng=1
51                set -f
52		;;
53        esac
54
55	case "$flag" in
56	-l)
57		str="${str#$pat}"		# substr -l pat string
58		;;
59	-L)
60		str="${str##$pat}"		# substr -L pat string
61		;;
62	-r)
63		str="${str%$pat}"		# substr -r pat string
64		;;
65	-R)
66		str="${str%%$pat}"		# substr -R pat string
67		;;
68	*)
69		str="${str%$2}"			# substr string pat
70		;;
71	esac
72
73	echo "$str"
74
75        #
76        # If we had file name generation when we started, re-enable it
77        #
78        if [ "$fng" = "1" ] ; then
79                set +f
80        fi
81}
82