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