pregunta de bash: doble sustitución de caracteres (uno por uno, y otro por otro) en una variable

Buenas

si:

var"braw braw-braw"
echo -e ${var// /.}


sustituye todos los espacios por puntos,

¿como seria para que, ademas de esa sustitución, sustituyera también los - por _?

si puede ser sin llamar a mas comandos, por que se puede hacer con

var"braw braw-braw"
echo -e "$(echo ${var} |tr ' ' . |tr - _)"


o

var"braw braw-braw"
echo -e "$(var=${var// /.};echo ${var//-/_})"


o con sed...

y no quiero. quiero que sea solo en una llamada (como lo primero que he puesto)

como es de esperar

var"braw braw-braw"
echo -e "${_ver// /.//-/_}"


no funciona, y no encuentro por ningún lado como seria

¿alguno me ayuda?
¿Te vale así?
var="braw braw-braw";echo $var| sed 's/ /./g;s/-/_/g'

(con el punto y coma, separando órdenes)
@Porthos, no, es precisamente lo que quiero evitar, el uso de más comandos. me da la idea de que la sustitución de caracteres en variables solo es aplicable a un solo carácter por variable

alguno puede conformar esto?

saludos
Bueno, realmente es una única llamada al sed... todo lo de dentro del sed es en una única orden (podrías separarlo con llaves, o con un awk con varios gsub y se vería más claro). No creo que se pueda hacer de otra forma mucho más sencilla
Yo lo haría con tr's y le cambiaría el subshell por apóstrofes graves.

De todas formas, mientras funcione y te guste, hazlo como más rabia te de ^^
~ % var="braw braw-braw" 
~ % echo -e ${var//[ -]/_}
braw_braw_braw
@codestation. no hace lo que busco XD (resultado que espero: 'braw braw-braw' -> 'braw.braw_braw')
~ % var="braw braw-braw"     
~ % echo -e ${${var// /\.}//-/_}
braw.braw_braw
eso es bash?

└───╼  var="braw braw-braw" ; echo -e ${${var// /\.}//-/_}
bash: ${${var// /\.}//-/_}: sustitución errónea
zsh, llevo tantos años sin usar bash que ni me di cuenta...
9 respuestas