Quais caracteres requerem escape na espera de strings?

1

Eu sei que os colchetes duros [ , ] exigem escape de barra invertida tripla quando usados dentro de expect "..." strings, então eu uso expect "blah blah \\[herp derp\\]" para transmitir com precisão esses caracteres para o verificador expect de E / S, mas outros personagens também exigem escape? Tubo? Parênteses? ???

    
por mcandre 20.12.2017 / 06:27

1 resposta

1

Existem 2 coisas acontecendo aqui:

  1. O Tcl usa [...] como a sintaxe de "substituição de comandos" (Consulte link regra 7). É como backticks em um script de shell. Dentro de aspas duplas, as substituições de comandos são realizadas.

  2. A correspondência de padrão padrão para o comando expect é de padrões "glob". Padrões Glob são documentados aqui: link Os colchetes são especiais para padrões glob.

Portanto, primeiro você precisa proteger os colchetes entre aspas duplas para evitar substituições de comandos. Então, se você quiser tratá-los como caracteres literais, você precisa escapar deles novamente.

Aqui estão algumas coisas que você pode fazer para reduzir as barras invertidas:

  1. use aspas não interpoladas: em Tcl que é {braces} não "quotes" .

  2. escolha um tipo de padrão diferente: se essa for uma sequência literal à qual você deseja corresponder, use a opção -ex para dizer que você deseja uma correspondência "exata".

Assim, você quer isso:

expect -ex {blah blah [herp derp]}
    
por 20.12.2017 / 14:59