Você deve usar aspas para passar valores às variáveis de função.
mysub( "hi", "howdy", text, 1)
Ou usando outro nome para uma variável:
thisarg = "hi"
mysub( thisarg, "howdy", text, 1)
Do manual do gawk
Because some built-in functions (e.g.
match
,split
,sub
) accept regexp constants as arguments, confusion can arise when attempting to use regexp constants as arguments to user-defined functions. For example:function mysub(pat, repl, str, global) { if (global) gsub(pat, repl, str) else sub(pat, repl, str) return str } { ... text = "hi! hi yourself!" mysub(/hi/, "howdy", text, 1) ... }
In this example, the programmer wants to pass a regexp constant to the user-defined function
mysub()
, which in turn passes it on to eithersub()
orgsub()
. However, what really happens is that thepat
parameter is assigned a value of either one or zero, depending upon whether or not$0
matches/hi/
. gawk issues a warning when it sees a regexp constant used as a parameter to a user-defined function, because passing a truth value in this way is probably not what was intended.
Como posso passar uma constante de expressão regular como um argumento para um função, de modo que a função pode receber o argumento como um regular expressão em vez de um valor de verdade?
Em outras palavras, antes que uma constante de expressão regular seja passada para um função, como posso evitar que seja avaliado como uma string expressão de correspondência e garantir que ele seja tratado como o que é?
match
, split
, sub
) como expressões regulares,
sem ser avaliado como uma expressão de correspondência de seqüência de caracteres? Obrigado.
Você deve usar aspas para passar valores às variáveis de função.
mysub( "hi", "howdy", text, 1)
Ou usando outro nome para uma variável:
thisarg = "hi"
mysub( thisarg, "howdy", text, 1)