DEF_23
次の正規表現を使用して一致させたい場合:
expect {
-re "DEF_\[0-9]*"
set result $expect_out(1,string)
}
なぜそれは言うのno such element in array
ですか?どのように機能し、正規表現を使用して$expect_out
キャプチャし、DEF
それを変数に割り当てるにはどうすればよいresult
ですか?
探しているのは、正規表現で括弧をキャプチャした場合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は、パターン全体に一致する文字列を指し、グロブパターンと正規表現パターンに対して生成されます。
マンページに説明的な例があります。
上記の説明は正確ではないようです!この例を確認してください。
$ 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)を使用した場合のテスト結果は同じです。私は何かが足りないのですか、それともこれは予想される動作ですか?
Aleksandar-一致を「\ndb。*$」に変更すると機能するはずです。
exp_internal 1をオンにすると、バッファに次のようなものが含まれていることがわかります: "ls -1 db * \ r \ ndbupgrade.log \ r \ n08:46:09"
したがって、カレット(^)はパターンマッチを破棄します。