Bash 有人能解释/给出这个shell参数替换的详细情况吗${cfg+;-f";$cfg";}

Bash 有人能解释/给出这个shell参数替换的详细情况吗${cfg+;-f";$cfg";},bash,shell,tmux,variable-substitution,Bash,Shell,Tmux,Variable Substitution,我正在寻找一个好的解决方法,以保持我的.tmux.conf文件在不同系统之间的一致性(我有OS X和Ubuntu,它们有不同的复制/粘贴支持技术),这时我遇到了一条提供解决方案的评论: 但是在我在注释中使用代码片段之前,我想完全理解它在做什么。特别是,我不太理解最后一行,而且这句话也没什么帮助 这是一行: exec /path/to/actual/tmux ${cfg+-f "$cfg"} "$@" 具体来说,${cfg+-f“$cfg”}部分是什么意思 这意味着如果设置了变量cfg,它将以-

我正在寻找一个好的解决方法,以保持我的
.tmux.conf
文件在不同系统之间的一致性(我有OS X和Ubuntu,它们有不同的复制/粘贴支持技术),这时我遇到了一条提供解决方案的评论:

但是在我在注释中使用代码片段之前,我想完全理解它在做什么。特别是,我不太理解最后一行,而且这句话也没什么帮助

这是一行:

exec /path/to/actual/tmux ${cfg+-f "$cfg"} "$@"

具体来说,
${cfg+-f“$cfg”}
部分是什么意思

这意味着如果设置了变量
cfg
,它将以
-f“$cfg”
的组合值展开

例如:

> a=1234
> echo "${a+b}" # => variable is set
b
> a=
> echo "${a+b}" # => empty but still set would still expand it.
b
> unset a
> echo "${a+b}" # => it's now unset so no output
(nothing)
另一个包含一个额外变量:

> a=1234
> x=y
> echo "${a+b "$x"}"
b y
> echo "${a+"$a $x"}"
1234 y

如果未设置,则表示跳过该参数。实际上导致以下情况之一:

exec /path/to/actual/tmux -f "/some/cfg" "$@"
exec /path/to/actual/tmux "$@"
因此,如果设置了
$cfg
,则使用
-f“$cfg”
,否则什么都不使用,因此tmux不会抱怨
-f
缺少参数