Предположим, я хочу сгенерировать имя файла на основе некоторых заданных переменных.
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"