【发布时间】:2012-06-06 15:17:03
【问题描述】:
我正在使用 SH shell,我正在尝试将字符串与变量的值进行比较,但 if 条件始终执行为真。为什么?
这是一些代码:
Sourcesystem="ABC"
if [ "$Sourcesystem" -eq 'XYZ' ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
echo Sourcesystem Value is $Sourcesystem ;
即使这样也不行:
Sourcesystem="ABC"
if [ 'XYZ' -eq "$Sourcesystem" ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
echo Sourcesystem Value is $Sourcesystem ;
其次,我们可以将其与 NULL 或空字符串匹配吗?
【问题讨论】:
-
首先在 Bourne shell 中你不需要额外的 ';'当我在 Bourne shell 中测试运行脚本时,if 条件为假。它首先会给出一个警告:[: ABC: integer expression expected。输出为:“源系统不匹配 ABC”。正如其他人所评论的, -eq 用于整数比较。在 Bourne shell (#!/bin/sh) 中使用单个等号进行字符串比较。你的 shell 应该首先纠正你。
-
投票重新开放。引用的 dups 用于 bash shell,而不是贫血的 sh shell,有时是 Posix shell 或 Dash。
-
同意并投票。
sh和bash与C和C++具有相同的关系。即使为第一个编写的代码在第二个中有效,但不能信任第二个的答案在第一个中起作用。