Patrones condicionales bash o zsh y expansiones variables

Patrones condicionales bash o zsh y expansiones variables

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 $albumque 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"

árbitro:3.5.3 Expansión de parámetros de Shell

información relacionada