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 既已設定且非空,則擴展為「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"

參考:3.5.3 Shell參數擴展

相關內容