1

我试图了解项目的 configure.ac 文件中的常见模式。我相当确定这是一个我很难解析的 bashism。这是一个例子:

LDFLAGS="${LDFLAGS:+$LDFLAGS }$OTHERFLAG"

其意图似乎是通过 OTHERFLAG 中的内容来扩展 LDFLAGS 的当前值。看起来写起来会更简单:

LDFLAGS="$LDFLAGS $OTHERFLAG"

bash手册中的相关部分说:

${parameter:+word}
    If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted.

我认为这里有一些防御性的东西,但我不确定到底是什么。

4

1 回答 1

3

如果你写:

LDFLAGS="$LDFLAGS $OTHERFLAG"

并且$LDFLAGS未设置,它将具有以空格开头的字符串,这可能是不可取的。

这就是为什么 :

LDFLAGS="${LDFLAGS:+$LDFLAGS }$OTHERFLAG"

例子:

tiago@dell:~$ unset a ; b="test"; a="${a:+$a }$b"; echo "$a"
test
tiago@dell:~$ unset a ; b="test"; a="$a $b"; echo "$a"
 test
于 2015-02-12T12:56:24.083 回答