echo wildcard globing

1

Estou tentando fazer eco de uma combinação de texto e variáveis contendo curingas que eu preciso "descompactar", mas encontrei o seguinte comportamento:

Se eu disser:

FILENAME=somefile*.txt
echo "something:" $FILENAME

Eu recebo:

something: somefile003.txt

Qual é o que eu quero, mas se eu disser: Se eu disser:

FILENAME=somefile*.txt
echo "something:"$FILENAME

Eu recebo:

something:somefile*.txt

Portanto, parece que, se não houver espaço entre aspas e a variável, ele não terá o caractere curinga. Existe uma maneira de fazê-lo processar o * sem adicionar um espaço?

    
por Maxim 24.07.2017 / 20:03

2 respostas

3

Você pode glob em uma matriz, assim

FILENAMES=(somefile*.txt)

e referencie o primeiro elemento como este

echo "something:${FILENAMES[0]}"

ou todos eles como este

echo "somethings:${FILENAMES[@]}"

Eu recomendo strongmente que você "aspas duplas" suas variáveis quando você as usa. Isso evita que eles sejam expandidos em várias palavras inesperadamente.

    
por 24.07.2017 / 20:20
1

Tente definir sua variável assim:

FILENAME=\ somefile*.txt; # that is, with a leading space ... and then
echo "something:"$FILENAME; 

isso faz com que a variável seja interpolada para ... alguma coisa: somefile * .txt

então isso torna o curinga expandido para ... algo: somefile003.txt

esses dois argumentos, em seguida, são passados para o echo, que prontamente os leva para o stdout.

    
por 24.07.2017 / 20:28