在ksh中比较字符串是否相等

时间:2009-11-02 10:36:22

标签: bash unix shell ksh

我正在使用下面的shell脚本进行测试:

#!/bin/ksh -x


instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi

它在if条件中给出了这个错误:

: ==: unknown test operator

==真的不是正确的语法吗? 我正在命令行上运行,如下所示

test_lsn_2 INSTANCE=ALL

有人可以建议一个解决方案。 感谢。

5 个答案:

答案 0 :(得分:16)

要比较字符串,您需要单个=,而不是双倍。如果字符串为空,你应该把它放在双引号中:

if [ "$instance" = "ALL" ]
then
    echo "strings matched \n"
fi

答案 1 :(得分:6)

我看到你正在使用ksh,但你添加了bash作为标签,你接受与bash相关的答案吗? 使用bash,您可以通过以下方式实现:

if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]

有关详情,请参阅here

答案 2 :(得分:4)

尝试

if [ "$instance" = "ALL" ]; then

有几个错误:

  1. 你需要在变量周围加上双引号以防止(不太可能)它是空的情况。在这种情况下,shell会看到if [ = "ALL" ]; then无效。

  2. shell中的等号使用单个=(无法在shell中的if中分配值。)

答案 3 :(得分:2)

totest=$1
case "$totest" in
  "ALL" ) echo "ok" ;;
  * ) echo "not ok" ;;
esac

答案 4 :(得分:0)

我已经回答了类似的问题。基本上,您需要的运算符是=(不是==),如果您的变量为空(即它变为if [ = ALL]),语法就会中断。有关详细信息,请查看the other answer