6

私は期待スクリプトでこの問題を抱えています。コマンドの出力が「0」のときにキャプチャし、「000」や「100」などの他の数字やチェーンと区別したい

私のコードは次のとおりです。

#!/usr/bin/expect -f
set timeout 3
spawn bash send "echo 0\n" 
expect {
-regexp {^0$} { send_user "\nzero\n" }  
-re {\d+} { send_user "\number\n"}
}
send "exit\n"

次の応答があります。

spawn bash
echo 0

number

ただし、次の正規表現は機能しません。

-regexp {^0$} { send_user "\nzero\n" }

次のように変更した場合:

-regexp {0} { send_user "\nzero\n" }

動作しますが、「00」「10」「1000」などもキャプチャします。

send "echo 100\n"
expect {
    -regexp {0} { send_user "\nzero\n" }
    -re {\d+} { send_user "\nnumber\n"}
}

結果:

spawn bash
echo 10

zero

何が間違っているのかわからず、Googleのヘルプから何も見つかりませんでした。ここで解決された同様の問題も検索しましたが、コードでそれを機能させることができませんでした。

更新

提案された修正コードを試しました:

#!/usr/bin/expect -f
set timeout 3
spawn bash
send "echo 0\n"
expect {
    -regexp {\b0\b} { send_user "\nzero\n" }
    -re {\d+} { send_user "\nnumber\n"}
}
send "exit\n"

しかし、私はまだこの応答を持っています:

spawn bash
echo 0

number

更新 2

私もこの行を試しました:

 -regexp {"^0\n$"} { send_user "\nzero\n" }

しかし、私はまだ同じ結果を得ています。

前もって感謝します

4

3 に答える 3

0

期待のドキュメントをざっと見てみました:

ただし、expect は行指向ではないため、これらの文字は、expect マッチング バッファーに現在ある (行ではなく) データの先頭と末尾に一致します。

正規表現では、改行があるという事実を考慮する必要があります。

データが0\nの場合、 を使用できます"^0\n$"

于 2013-08-13T13:53:22.680 に答える
-1

単語境界を使用してみてください。\b0\b

于 2013-08-13T12:50:09.693 に答える