0

シェルのみを介して省エネルギーの起動とシャットダウンの設定をテストしようとしていますが、文字列の比較は常に no で応答します

ここに私のコードがあります

#!/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

テストコマンドの出力に隠し文字があると思われます.それが実際に問題である場合、それらを確認して根絶する方法はありますか?

4

2 に答える 2

2

変数参照は一重引用符内では解決されません。代わりに二重引用符を使用してください:

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

$schdまた、または$testが空の文字列に解決される場合、上記のテストは機能しないことに注意してください。これを回避する一般的な方法は次のとおりです。

if [ x"$test" = x"$schd" ]; then...
于 2013-07-03T17:39:12.963 に答える
1

$test に余分な文字が含まれている可能性があると思われる場合は、$test$schdが含まれていることをテストしてみてください。

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

変更してみる

echo $schd;
echo $test;

echo "schd=>$schd<"
echo "test=>$test<"
于 2013-07-03T18:48:04.623 に答える