:= 和 [[ 之间是否存在行为差异?
Are there behavioral differences between := and [[?
这两个代码片段,一个使用冒号等号,另一个使用双括号程序是否表现出相同的行为?
: "${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
.
这两个代码片段,一个使用冒号等号,另一个使用双括号程序是否表现出相同的行为?
: "${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
.