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 Shell参数扩展

相关内容