=和[[之间是否存在行为差异



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

: "${foo:=bar}"

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

如果他们在行为上是一样的,那么在风格上更喜欢哪一个?我已经在不同的地方看到了这两种方法的使用,我无法决定哪一种在可维护性和可读性方面更好。

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

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

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

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

foo=${foo:-bar}

如果已经设置了${foo:-bar},则其计算结果为$foo,否则为bar

相关内容

  • 没有找到相关文章

最新更新