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 $album
ist 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