Supongamos que quiero generar un nombre de archivo basado en algunas variables determinadas.
track=01
title="Some title"
album="Some album"
echo ${track}. ${title} (${album})
-> 01. Some title (Some album)
Ahora, en el caso $album
que esté vacío, obtendría
->01. Some title ()
Preferiría que en ese caso se eliminara el paréntesis:
->01. Some title
Lo que quiero es algo similar a las plantillas utilizadas enFoobarcomo esto:
%pista%. %título% [(%álbum%)]
¿Es posible hacerlo en bash (o zsh) pero en una sola expresión como la anterior y sin usar if...fi ni nada por el estilo?
Respuesta1
bash: sí, pero no es muy bonito:
filename="${track}. ${title}${album:+ ($album)}"
Se ${var:+value}
expande a "valor" si $var está configurado y no está vacío.
Demostrando:
$ album="Some album"
$ filename="${track}. ${title}${album:+ ($album)}"
$ declare -p filename
declare -- filename="01. Some title (Some album)"
$ album=""
$ filename="${track}. ${title}${album:+ ($album)}"
$ declare -p filename
declare -- filename="01. Some title"
$ unset album
$ filename="${track}. ${title}${album:+ ($album)}"
$ declare -p filename
declare -- filename="01. Some title"