【发布时间】:2010-11-08 13:20:54
【问题描述】:
我正在尝试在一个简单的 shell 脚本中比较两个字符串。
我用的是/bin/sh而不是/bin/bash,经过无数小时的调试,结果是sh(实际上是dash)无法处理这段代码:
if [ "$var" == "string" ]
then
do something
fi
什么是使用/bin/sh 比较字符串的可移植方式?我知道我总是可以通过使用 != 来做相反的事情,但我想知道一种更清洁、更便携的方式。
【问题讨论】:
-
您可以使用
[[ $var == "string" ]],这是 POSIX,但可选(afaik)。或者您使用[ "$var" = "string" ]。注意单括号版本中变量周围的"":如果$var为空,则需要它 -
重要的部分是 litb 提到的
$var周围的引号。如果没有引号,[ $var = "value" ]将变为[ = "value" ],这会使 shell 非常混乱。否则,当您遇到空变量时,您可能会看到类似 "[: =: unary operator expected" 的错误。 -
我了解“$var” vs. $var,我的问题是 == vs. =
-
[[ ]] 被 POSIX 保留,但根本没有定义。它只是保留,因为我认为这是 Korn 的一项功能。
标签: bash dash-shell string-comparison