Acabei de descobrir que substr()
no awk aceita 0 ou 1 como o índice inicial em uma string. Eu testei isso no Gawk 5.1.0 e no MacOS awk 20070501.
awk 'BEGIN {print substr("abcd", 0, 1)}'
produz "a", assim como
awk 'BEGIN {print substr("abcd", 1, 1)}'
e
awk 'BEGIN {print substr("abcd", 2, 1)}'
gera "b" apenas para provar que nada está obviamente errado.
Não vi nada nas man
páginas ou no info
arquivo Gawk além de menções à indexação 1.
Para consistência com a documentação e com o fato index()
de retornar 1 para a primeira posição e 0 para nenhuma correspondência, seria uma boa política usar sempre 1.
Minha pergunta é por que essa dualidade é o caso? Além disso, está documentado em algum lugar? Existem outras implementações awk que fazem isso?
Da documentação online do GNU awk: 'substr() function' :
as inconsistências no
substr()
índice inicial não positivo têm sido um dos critérios que usei para meu próprio módulo para identificar em qualawk
variante ele está sendo executado: