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 が設定されており、空でない場合は、「値」に展開されます。

デモンストレーション:

$ 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 シェルパラメータの展開

関連情報