a bit better ~ $ a=( \' \\ \$var $'\e[1m' ) ps='$ ' ; printf -v q %q\ "${a[@]}" ; ps+=$q ; printf %s\\n "$ps" $ \' \\ \$var $'\E[1m'
On Mon, Aug 23, 2021, 00:50 Alex fxmbsw7 Ratchev <fxmb...@gmail.com> wrote: > oh indeed it doesnt do what you want > maybe printf %q does > sorry > > On Mon, Aug 23, 2021, 00:45 Alex fxmbsw7 Ratchev <fxmb...@gmail.com> > wrote: > >> i meant this with removing quotes >> >> ~ $ shopt -s extglob ; a=( . a \' \$var $'\e[1m' ) ps='$ ' a=( >> "${a[@]@Q}" ) ; for i in ${!a[@]} ; do a[i]=${a[i]#?(\$)\'} a[i]=${a[i]%\'} >> ; done ; ps+=${a[*]} ; printf %s\\n "$ps" >> $ . a \ $var \E[1m >> ~ $ >> >> On Mon, Aug 23, 2021, 00:02 Emanuele Torre <torreemanue...@gmail.com> >> wrote: >> >>> Emanuele Torre <torreemanue...@gmail.com> wrote: >>> > ~ --${@Q}-> '~' --${#\'}-> ~' --${%\'}-> ~ >>> >>> Sorry, that was a bad example. Still, it does not accomplish anything: >>> >>> \w --${@Q}-> '\w' --${#\'}-> \w' --${%\'}-> \w >>> >>> On Sun, 22 Aug 2021 at 23:56, Emanuele Torre <torreemanue...@gmail.com> >>> wrote: >>> > >>> > Alex fxmbsw7 Ratchev <fxmb...@gmail.com> wrote: >>> > > and renoving the beginning and ending ' s >>> > >>> > even if you remove the first and last ': >>> > 1) that is 3 PEs as the solution i described (${a//\\/\\\\} >>> > ${a//\`/\\\`} ${a//$/\\$} vs ${a@Q} ${a#\'} ${a%\'} ) >>> > 2) it doesn't actually accomplish anything: >>> > >>> > ~ --${@Q}-> '~' --${#\'}-> ~' --${%\'}-> ~ >>> > >>> > On Sun, 22 Aug 2021 at 23:14, Alex fxmbsw7 Ratchev <fxmb...@gmail.com> >>> wrote: >>> > > >>> > > what about @Q >>> > > and renoving the beginning and ending ' s >>> > > >>> > > >>> > > On Sun, Aug 22, 2021, 23:13 Emanuele Torre <torreemanue...@gmail.com> >>> wrote: >>> > >> >>> > >> It would be nice to have a parameter transformation (e.g. "${par@p >>> }") >>> > >> that expands $par to a string that will not be expanded by PS1, >>> PS2, &c. >>> > >> >>> > >> example: >>> > >> >>> > >> tmp_var=$(blabla) # this variable will not exist when PS1 is >>> expanded >>> > >> PS1="blabla ${tmp_var@p} blabla" >>> > >> >>> > >> I think a valid way to achieve the same behaviour in the currenct >>> > >> version of bash: >>> > >> >>> > >> tmp_var=$(blabla) >>> > >> tmp_var=${tmp_var//\\/\\\\} >>> > >> tmp_var=${tmp_var//\`/\\\`} >>> > >> tmp_var=${tmp_var//$/\\$} >>> > >> PS1="blabla $tmp_var blabla" >>> > >> >>> > >> But a parameter transformation would be nicer. >>> > >> >>> > >> This parameter transformation should also make sure to not cause an >>> > >> expansion when concatenated. >>> > >> >>> > >> var='$' >>> > >> printf '%s\n' "${var@p}" # should not expand to `$'. >>> > >> PS1="${var@P}(date)" # because this should expand to `$(date)' >>> > >> # and not to the output of `date'. >>> > >> >>> > >> Cheers, >>> > >> emanuele6 >>> > >> >>> >>