Bedingte Muster und Variablenerweiterungen in Bash oder Zsh

Bedingte Muster und Variablenerweiterungen in Bash oder Zsh

Angenommen, ich möchte einen Dateinamen basierend auf einigen vorgegebenen Variablen generieren.

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

-> 01. Some title (Some album)

Jetzt in der Fall $albumist leer würde ich bekommen

->01. Some title ()

In diesem Fall würde ich lieber wollen, dass die Klammern entfernt werden:

->01. Some title

Was ich möchte, ist etwas Ähnliches wie die Vorlagen infoobarso was:

%Titel% [(%Album%)]

Ist es möglich, dies in Bash (oder Zsh) zu tun, aber in einem einzelnen Ausdruck wie dem obigen und ohne if...fi oder etwas in der Art zu verwenden?

Antwort1

bash: ja, aber es ist nicht sehr schön:

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

Dies ${var:+value}wird zu „Wert“ erweitert, wenn $var sowohl festgelegt als auch nicht leer ist.

Demonstration:

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

Verweis:3.5.3 Shell-Parametererweiterung

verwandte Informationen