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