Parece-me que você deseja remover coisas entre \[
e \]
:
$ shopt -s extglob
$ printf '%s\n' "${PS1//\\[*(\[^]]|[^\])\\]/}"
(\u@\h)-(\t)-(\w)${git_branch}\n$
No entanto, bash
de substituição é tão ineficiente que você provavelmente seria melhor disparar perl
ou sed
aqui, ou fazer isso em um loop como:
p=$PS1 np=
while :; do
case $p in
(*\\[*\\]*) np=$np${p%%\\[*};p=${p#*\\]};;
(*) break;;
esac
done
np=$np$p
printf '%s\n' "$np"
(essa é a sintaxe POSIX sh padrão acima, BTW).
E se você quiser o prompt expandido :
ep=$(PS4=$np;exec 2>&1;set -x;:); ep=${ep%:}