假设我想根据一些给定的变量生成一个文件名。
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参数扩展