Curinga parou de funcionar

1

De repente, o * parou de funcionar e um programa simples:

#!/bin/bash

for f in *.txt
do
    echo $f
done

produz apenas *.txt string em vez de arquivos no diretório (ou nada). Mas * sem nenhum caractere adicional funciona bem. O que há de errado? É ridículo porque funcionou ontem.

A versão do Bash é 4.4.12 (1) -release.

    
por Дмитрий Терехов 03.07.2018 / 16:20

1 resposta

2

Você também não possui arquivos no diretório atual com .txt como sufixo do nome do arquivo ou há um caractere invisível no final da linha no script, como um retorno de carro.

Um retorno de carro pode ter entrado nele se você editou o arquivo de texto de script em uma máquina Windows e o salvou como um arquivo de texto do DOS.

Para removê-los de todas as linhas, use dos2unix no arquivo de script.

Em ambos os casos, o padrão não se expande porque não há nada correspondente. A concha, portanto, mantém o padrão não expandido.

Se você quiser que o script pule o loop completamente se não houver nomes de arquivos correspondentes, defina a opção nullglob shell:

shopt -s nullglob

Isso faz com que bash expanda padrões não correspondentes para a string vazia.

    
por 03.07.2018 / 16:27