Условные шаблоны Bash или Zsh и расширения переменных

Условные шаблоны Bash или Zsh и расширения переменных

Предположим, я хочу сгенерировать имя файла на основе некоторых заданных переменных.

track=01
title="Some title"
album="Some album"
echo ${track}. ${title} (${album})

-> 01. Some title (Some album)

Теперь в случае, $albumесли он пуст, я бы получил

->01. Some title ()

В этом случае я бы предпочел убрать скобки:

->01. Some title

Мне нужно что-то похожее на шаблоны, используемые вфубартак:

%трек%. %название% [(%альбом%)]

Возможно ли сделать это в bash (или zsh), но в одном выражении, как указано выше, и не использовать if...fi или что-то подобное?

решение1

bash: да, но это не очень красиво:

filename="${track}. ${title}${album:+ ($album)}"

${var:+value}Если $var задана и непуста, то она расширяется до «value».

Демонстрация:

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

ссылка:3.5.3 Расширение параметров оболочки

Связанный контент