8

DEF_23次の正規表現を使用して一致させたい場合:

expect {
    -re "DEF_\[0-9]*"
    set result $expect_out(1,string)
}

なぜそれは言うのno such element in arrayですか?どのように機能し、正規表現を使用して$expect_outキャプチャし、DEFそれを変数に割り当てるにはどうすればよいresultですか?

4

3 に答える 3

13

探しているのは、正規表現で括弧をキャプチャした場合expect_out(0,string)、配列要素にデータが入力されることです。1,string

expectedマンページには、 expectコマンドのドキュメントでexpect_outの使用が 記載されています。

パターン(またはeofまたはfull_buffer)に一致すると、一致する出力と以前に一致しなかった出力が変数expect_out(buffer)に保存されます。最大9つの正規表現サブストリングの一致がexpect_out(1、string)からexpect_out(9、string)までの変数に保存されます。パターンの前に-indicesフラグが使用されている場合、10個の文字列の開始インデックスと終了インデックス( lrangeに適した形式)が変数expect_out(X、start)およびexpect_out(X、end)に格納されます。ここでXは数字、バッファ内のサブストリング位置に対応します。0は、パターン全体に一致する文字列を指し、グロブパターンと正規表現パターンに対して生成されます。

マンページに説明的な例があります。

于 2012-06-15T15:26:44.477 に答える
1

上記の説明は正確ではないようです!この例を確認してください。

$ cat test.exp
#!/usr/bin/expect

set timeout 5
log_user 0

spawn bash

send "ls -1 db*\r"
expect {
  -re "^db.*$" {
    set bkpfile $expect_out(0,string)
  }
}

send_user "The filename is: $bkpfile\n"

close
$ ls -1 db*
dbupgrade.log
$ ./test.exp
can't read "bkpfile": no such variable
    while executing
"send_user "The filename is: $bkpfile\n""
    (file "./test.exp" line 15)
$

$ expected_out(1、string)または$ expected_out(buffer)を使用した場合のテスト結果は同じです。私は何かが足りないのですか、それともこれは予想される動作ですか?

于 2014-10-23T03:07:29.963 に答える
0

Aleksandar-一致を「\ndb。*$」に変更すると機能するはずです。

exp_internal 1をオンにすると、バッファに次のようなものが含まれていることがわかります: "ls -1 db * \ r \ ndbupgrade.log \ r \ n08:46:09"

したがって、カレット(^)はパターンマッチを破棄します。

于 2016-06-22T13:49:49.413 に答える