1

这两个代码片段,一个使用冒号等号符号,另一个使用双括号程序是否表现出相同的行为?

: "${foo:=bar}"

if ! [[ $foo ]]; then
    foo=bar
fi

如果它们在行为上相同,那么在风格上更喜欢哪一个?我已经看到这两种方法都在不同的地方使用过,我无法确定哪一种更具有可维护性和可读性。

4

1 回答 1

2

据我所知,它们在功能上是等效的。至于哪个最好,我会说这是一个品味问题。我个人更喜欢: ${foo:=bar}它,因为它更简洁,但其他不太熟悉语法的人可能会采用更明显的方法。

请注意,您的第一种方法使用标准外壳功能,因此应该适用于任何符合 POSIX 的外壳。为了使您的第二种方法更便携,我会选择:

if [ -z "$foo" ]; then
    foo=bar
fi

正如评论中所建议的那样,另一个可以被视为清晰和简洁之间折衷的选择是:

foo=${foo:-bar}

${foo:-bar}评估$foo是否已经设置,否则bar

于 2016-03-28T23:15:28.150 回答