いくつかの指定された変数に基づいてファイル名を生成したいとします。
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"