A função Bash nomeada com o caractere de interrogação char não funciona mais

2

No Ubuntu 11.10 eu tive um comando bash / alias / function como:

function ?() {
  xxx 
}

Isso funcionou como um encanto.

Agora no Ubuntu 13.04 não funciona mais. Quando tento executar o comando com algum argumento, obtenho:

  

0: comando não encontrado

O que mudou que eu não posso mais usar essa abreviação?

P.S. Claro que é possível alterar o nome do alias, é apenas uma questão de curiosidade.

    
por Dan Lee 21.08.2013 / 12:18

1 resposta

3

? é um glob (padrão, curinga) que corresponderá a nomes de arquivos que consistem exatamente em um caractere; ele é substituído pelos arquivos correspondentes no diretório atual. Se não houver arquivos correspondentes no diretório atual, ? permanecerá inalterado e sua função será acionada. Isso é chamado de expansão do nome do caminho em man bash e expansão do nome do arquivo no manual de referência bash

Nesse caso, aparentemente, você tem um arquivo chamado 0 no diretório atual, portanto, ? foo é alterado para 0 foo pela expansão pathaname e, em seguida, ele tenta executar um comando chamado 0 with foo como argumento. Se você remover / renomear esse arquivo para algo maior que um caractere, sua função deve começar a funcionar. Como alternativa, você pode usar \? ou "?" ou '?' para evitar que ele seja tratado como um glob.

Em uma nota lateral, usar ? em um nome de função não está documentado e não é recomendado. Somente alfanuméricos e sublinhados são documentados para funcionar (o mesmo que é permitido para nomes de variáveis ).

    
por geirha 21.08.2013 / 20:14