shell字符串比较不起作用

时间:2013-07-03 17:34:34

标签: macos shell

我正在尝试通过shell测试节能器启动和关闭设置只有我的字符串比较总是响应没有

这是我的代码

#!/bin/sh

pmset repeat shutdown MTWRFSU 19:00:00 wakeorpoweron MTWRF 07:00:00

test=`pmset -g sched`
schd="Repeating power events: wakepoweron at 7:00AM weekdays only shutdown at 7:00PM every day"
echo $schd;
echo $test;
if [ '$test' = '$schd' ]; then 
    echo "yes"
else 
    echo "no"
fi

我在这里做错了什么?

添加了这个按预期返回yes

test2="Repeating power events: wakepoweron at 7:00AM weekdays only shutdown at 7:00PM every day"
schd2="Repeating power events: wakepoweron at 7:00AM weekdays only shutdown at 7:00PM every day"

if [ "$test2" = "$schd2" ]; then 
    echo "yes"
else 
    echo "no"
fi

我怀疑我的测试命令的输出中有隐藏的字符,因为其他所有内容似乎都有一些方法可以确认并根除它们,如果这实际上是问题吗?

2 个答案:

答案 0 :(得分:2)

变量引用不在单引号内解析;改为使用双引号:

if [ "$test" = "$schd" ]; then...

另请注意,如果将$schd$test解析为空字符串,则上述测试将无效。解决这个问题的一个常见技巧如下:

if [ x"$test" = x"$schd" ]; then...

答案 1 :(得分:1)

如果您认为$ test可能有额外字符,请尝试测试$ test 包含 $ schd:

case "$test" in
*"$schd"*) echo yes ;;
*) echo no ;;
esac

尝试更改

echo $schd;
echo $test;

echo "schd=>$schd<"
echo "test=>$test<"