【发布时间】:2016-10-26 08:32:53
【问题描述】:
我相信以下两个代码 sn-ps 在符合 POSIX 的 shell 中都是有效的:
选项 1:
if [ "$var" = "dude" ]
then
echo "Dude, your var equals dude."
fi
选项 2:
if test "$var" = "dude"
then
echo "Dude, your var equals dude."
fi
首选哪种语法,为什么?在某些情况下是否有理由使用另一种?
【问题讨论】:
-
是的,它们都是有效的。不,没有一个特别的理由偏爱一个而不是另一个 - 这是一种风格选择。
-
test可能会导致进程分叉,从而降低效率。 -
@WillemVanOnsem,在
test不是内置的shell 上,那么它也将使用外部/usr/bin/[-- 寻找它,你的操作系统确实 将其作为外部二进制文件(通常是指向与/usr/bin/test相同的inode 的硬链接,它查看其argv[0]以查看其调用方式并决定是否从其参数列表中丢弃尾随])。 -
@CharlesDuffy:好的,非常感谢您指出这一点。
-
我内心的书呆子不禁认为答案是“是”。