[
é especial no TCL e "..."
interpola, então
"blah [foo]"
faz com que o TCL tente chamar o procedimento foo
( proc
ou o que outros idiomas chamam de sub
ou function
). Alguém pode voltar a usar o [
expect "blah \[foo]"
ou, em vez disso, cite com {}
, o que desativa a interpolação
expect {blah [foo]}
Essas são as opções sãs. Não use nenhum código além desse ponto!
O Ministério da Silly Procs
Também podemos criar um proc
que faz com que uma chamada para Y/n
retorne [Y/n]
;
$ expect
expect1.1> proc Y/n {} { return "\[Y/n]" }
expect1.2> puts "abort [Y/n]"
abort [Y/n]
expect1.3>
isso permite que [Y/n]
opere dentro de uma string interpolada. Ainda mais problemas podem ser obtidos via unknown(n)
, pois isso nos permite criar um proc
para a maioria de qualquer string aleatória [...]
interpolada em qualquer lugar ... a menos que um proc
já exista para o nome do procedimento dado; como eu disse anteriormente, esta é uma má ideia e não deve ser usada.
expect1.1> proc unknown args { return "\[$args]" }
expect1.2> puts "abort [Y/n]"
abort [Y/n]
expect1.3> puts "already exists [puts -nonewline puts\ ]"
puts already exists
expect1.4>