9.2. Bash (Bourne-Again Shell)
- O Bash-4.0 e posteriores agora permitem construções de substituição de processos para passar inalterados através da expansão de controle. Então qualquer expansão dos conteúdos terá de ser especificada separadamente e qualquer substituição de processo terá de ser digitada separadamente.
- O Bash-4.0 e posteriores agora permitem ao SIGCHLD interromper a espera builtin, conforme o Posix determina. Então o trap SIGCHLD não é mais invocado uma vez para cada filho existente se você estiver usando 'wait' para esperar por todos os filhos.
- Já que agora o Bash-4.0 e posteriores seguem as regras Posix para encontrar os delimitadores de encerramento de uma substituição de comando $(), ele não se comportará como nas versões anteriores, mas captará mais erros de sintaxe e análise antes de reproduzir uma subshell para avaliar a substituição de comando.
- O código de acabamento programável usa o mesmo conjunto de caractéres delimitadores como readline quando quebrar as linhas de comando em palavras, em vez do conjunto de meta caractéres do shell, então o acabamento programável e readline devem ser mais consistentes.
- Quando a leitura do builtin expira, ela tenta atribuir qualquer leitura de entrada para varáveis especificas, que também faz as variáveis serem definidas às strings vazias se não há entradas suficientes. Versões anteriores descartavam a leitura de caractéres.
- No Bash-4.0 e posteriores, quando um dos comandos em um pipeline é terminado por um SIGINT enquanto executar uma lista de comandos, o shell age como se recebesse a interrupção.
- O Bash-4.0 e versões posteriores mudam o manuseio da opção
set -e
para que o shell saia se um pipeline falhar (e não somente se o último comando no pipeline com falha é um comando simples). Isto não é como o Posix especifica. Há uma tarefa a caminho para atualizar esta porção do padrão; o comportamento do Bash-4.0 tenta capturar o consensus no momento do lançamento. - O Bash-4.0 e posteriores tem o bug Posix corrigido que fazia o builtin
.(source)
buscar o diretório atual para o seu argumento de nome de arquivo, mesmo se o"."
não está no sistema PATH. O Posix diz que o shell não deve olhar na variável PWD neste caso. - O Bash-4.1 usa o local atual quando comparar as strings usando operadores do comando
[[
. Isto pode ser revertido ao comportamento anterior definindo uma das opçõescompatNN
shopt.
Além dos pontos já listados, citar o argumento padrão à expressão regular correspondendo ao operador condicional =~ pode fazer a correspondência regexp parar de funcionar. Isto ocorre em todas as arquiteturas. Nas versões do bash anteriores ao 3.2, o efeito de comentar o argumento de expressão regular ao [[ operador =~ do comando não era especificada. O efeito prático era que comentar duas vezes o argumento padrão requeria "" para comentar caractéres especiais, que interferiam com o processamento da barra inversa realizada pela expansão da palavra duas vezes comentada.