------------------------------ *From*: Robert Elz *Subject*: Re: ${p+\"$p\"} *Date*: Mon, 21 Jan 2019 23:38:22 +0700 ------------------------------
(...) > With the quotes, most other shells produce the output reported > from dash (that includes ksh93, yash, ...) zsh just says it iis > a parse error, which is probably a rational choice! > Nothing else I tested produces what bash does, which does seem > to be a kind of odd pair of results. That is quite inexact, there are four groups: heirloom sh : "A" \"A\" \\"A\\" \\\"A\\\" ash : A \"A\" \A\ \\"A\\" dash : A \"A\" \A\ \\"A\\" b43sh : A \"A\" \A\ \\"A\\" b44sh : A \"A\" \A\ \\"A\\" posixbash : A \"A\" \A\ \\"A\\" yash : A "A" \A\ \"A\" y2sh : A "A" \A\ \"A\" posh : A "A" \A\ \"A\" lksh : A "A" \A\ \"A\" mksh : A "A" \A\ \"A\" ksh93 : A "A" \A\ \"A\" attsh : A "A" \A\ \"A\" zsh/sh : ./t.sh:7: parse error zsh/ksh : ./t.sh:7: parse error zsh : ./t.sh:7: parse error But yes: > But this is an area that is a monumental mess, and the only rational > choice is to find some workaround which does not involve putting > a " inside a var expansion inside a here doc. Maybe: p=A q='"' cat <<_EOF_ ${p+$q$p$q} ${p+\\$q$p\\$q} _EOF_ Which yields "A" \"A\" in all shells tested (except heirloom bourne shell). Or, even simpler (depending on use): echo ${p+"$p"} ${p+\"$p\"} ${p+\\"$p\\"} ${p+\\\"$p\\\"}