假設我想根據一些給定的變數產生一個檔名。
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"