1name: strsub-basic 2description: 3 Valid string substitutions 4stdin: 5 echo empty ${v/old/new} 6 v=old 7 echo empty ${v/old/} 8 echo ${v/new/} 9 v='old new' 10 echo ${v/old/new} 11 v='new old' 12 echo ${v/old/new} 13 echo "${v/old/new}" 14 foo='baaaaar' 15 echo ${foo//a/v} 16 echo ${foo/a/v} 17expected-fail: yes 18expected-stdout: 19 empty 20 empty 21 old 22 new new 23 new new 24 new new 25 bvvvvvr 26 bvaaaar 27--- 28 29name: strsub-multiline 30description: 31 Value spanning multiple lines 32stdin: 33 v=`cat <<! 34 bsd 35 bsd.rd 36 bsd.sp 37 !` 38 echo ${v/bsd.rd/} 39expected-fail: yes 40expected-stdout: 41 bsd bsd.sp 42--- 43 44name: strsub-global 45description: 46 Replace all occurrences 47stdin: 48 v='old new old' 49 echo ${v//old/new} 50 v='w h i t e s p a c e' 51 echo ${v//[[:blank:]]/} 52 v='/usr/src' 53 echo ${v//\////} 54expected-fail: yes 55expected-stdout: 56 new new new 57 whitespace 58 //usr//src 59--- 60 61name: strsub-nested 62description: 63 Nested substitutions 64stdin: 65 v=old 66 echo ${u:-${v/old/new}} 67 v='old new' 68 echo ${v/old/${v/old/new}} 69expected-fail: yes 70expected-stdout: 71 new 72 new new new 73--- 74 75name: strsub-longest 76description: 77 Favor the first longest match 78stdin: 79 v='old/old' 80 echo ${v/old?(\/)/new } 81 echo ${v/o*/new} 82 echo ${v//old?(\/)/new} 83 echo ${v//?(\/)old//} 84expected-fail: yes 85expected-stdout: 86 new old 87 new 88 newnew 89 // 90--- 91 92name: strsub-replacement-1 93description: 94 Variables are expanded 95stdin: 96 v=old 97 r=new 98 echo ${v/old/$r} 99expected-fail: yes 100expected-stdout: 101 new 102--- 103 104name: strsub-replacement-2 105description: 106 The replacement is not treated as magic 107stdin: 108 v=old 109 echo ${v/old/new*} 110expected-fail: yes 111expected-stdout: 112 new* 113--- 114 115name: strsub-missing-pattern 116description: 117 A pattern is not required 118stdin: 119 v=old 120 echo ${v/} 121expected-fail: yes 122expected-stdout: 123 old 124--- 125 126name: strsub-nounset 127description: 128 Respect nounset 129stdin: 130 set -u 131 echo ${v/old/new} 132expected-fail: yes 133expected-stderr-pattern: 134 /v: parameter not set/ 135expected-exit: 1 136--- 137 138name: strsub-posix 139description: 140 Respect POSIX 141env-setup: !POSIXLY_CORRECT=! 142stdin: 143 echo ${v/old/new} 144expected-stderr-pattern: 145 /bad substitution/ 146expected-exit: 1 147--- 148