That is not at all the same thing.

  $ t='~' q='?' s='*' n=$'\n' bn='\n'
  $ a="hello ${t@Q} ${q@Q} ${s@Q} ${n@Q} ${bn@Q} hi"
  $ printf '%s\n' "${a@P}"
  hello '~' '?' '*' $'
  ' '
  ' hi

With the parameter transformation I requested, this is what should be printed:

  $ t='~' q='?' s='*' n=$'\n' bn='\n'
  $ a="hello ${t@p} ${q@p} ${s@p} ${n@P} ${bn@p} hi"
  $ printf '%s\n' "${a@P}"
  hello ~ ? *
   \n hi

Similarly to the sequence of PEs i described previously (which I'm not
sure is actually bullet proof;kj this is also one reason why it would be
nice to have a dedicated parameter transformation that is guaranteed to
work):

  $ t='~' q='?' s='*' n=$'\n' bn='\n'
  $ s_t=${t//\\/\\\\}   s_t=${s_t//\`/\\\`}   s_t=${s_t/$/\\$}
  $ s_q=${q//\\/\\\\}   s_q=${s_q//\`/\\\`}   s_q=${s_q/$/\\$}
  $ s_s=${s//\\/\\\\}   s_s=${s_s//\`/\\\`}   s_s=${s_s/$/\\$}
  $ s_n=${n//\\/\\\\}   s_n=${s_n//\`/\\\`}   s_n=${s_n/$/\\$}
  $ s_bn=${bn//\\/\\\\} s_bn=${s_bn//\`/\\\`} s_bn=${s_bn/$/\\$}
  $ a="hello $s_t $s_q $s_s $s_n $s_bn hi"
  $ printf '%s\n' "${a@P}"
  hello ~ ? *
   \n hi

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
>>

Reply via email to