我正在尝试通过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
我怀疑我的测试命令的输出中有隐藏的字符,因为其他所有内容似乎都有一些方法可以确认并根除它们,如果这实际上是问题吗?
答案 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<"