Estou tentando fazer algum gerenciamento de arquivos no bash e tenho strings neste formato:
1 dir/hello.txt
2 dir2/bar.jpg
Quando executo esta substituição: ${FOO/[:space:]*/Hello}
obtenho este resultado:1 dir/hHello
O objetivo é substituir tudo após o primeiro espaço (incluindo o espaço) porHello
Parece um bug para mim. Nesse caso, confirme e eu levarei o problema para o upstream.
Você quase acertou. Da sua citação :
Então, você precisa dobrar os colchetes:
produz
1Hello
.(TLDR no final.) Da especificação POSIX do OpenGroup:
na definição de localidade, a expressão "[[.ch.]]" deve ser tratada como uma RE contendo o símbolo de intercalação 'ch', enquanto "[ch]" deve ser tratada como uma RE correspondendo a 'c' ou 'h'. Símbolos de intercalação são reconhecidos somente dentro de expressões de colchetes. Se a string não for um elemento de intercalação na localidade atual, a expressão é inválida.
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_05
A solução foi usar colchetes duplos. Vou empurrar para cima para documentar isso melhor.