我正在尝试在一个简单的shell脚本中比较两个字符串。
我一直使用的是/bin/sh
而不是/bin/bash
,在经过无数个小时的调试之后,发现sh(实际上是dash)无法处理这段代码块:
if [ "$var" == "string" ]
then
do something
fi
如何使用 /bin/sh
以可移植的方式比较字符串?我知道可以通过使用 != 来执行相反的操作,但我想知道是否有更清晰、可移植的方法。
什么是使用 /bin/sh
可移植比较字符串的方法?我知道可以使用 != 进行相反操作,但我想了解更简洁、可移植的方法。
[[ $var == "string" ]]
,这是POSIX标准,但可选的(据我所知)。或者你可以使用[ "$var" = "string" ]
。请注意,在单括号版本中,变量周围的""
是必需的:如果$var
为空,则需要它。 - Johannes Schaub - litb$var
周围的引号,就像litb所提到的那样。如果没有引号,则[ $var = "value" ]
将变成[ = "value" ]
,这会使shell相当地混乱。否则,当您遇到一个空变量时,您可能会看到类似于_"[: =: unary operator expected"_的错误。 - D.Shawley