有人可以解释/给出这个shell参数替换的细分吗? $ {cfg + -f“$ cfg”}

时间:2013-09-17 21:24:20

标签: bash shell tmux variable-subsitution

我正在寻找一个很好的解决方法,让我的.tmux.conf文件在各个系统中保持一致(我有OS X和Ubuntu,并且他们有不同的复制/粘贴支持技术)当我遇到这个评论提供了一个解决方案:https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/8#issuecomment-4134987

但在我在评论中使用代码段之前,我想完全理解它在做什么。特别是,我不太明白最后一行,bash man page for parameter substitution没有多大帮助。

这是一行:

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

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

2 个答案:

答案 0 :(得分:4)

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

exec /path/to/actual/tmux -f "/some/cfg" "$@"
exec /path/to/actual/tmux "$@"

因此,如果设置$cfg,则使用-f "$cfg",否则不使用任何内容,因此tmux不会抱怨-f缺少参数。

答案 1 :(得分:1)

这意味着如果设置变量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