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