Globbing estendido dentro do script - o que estou fazendo de errado?

Globbing estendido dentro do script - o que estou fazendo de errado?

então estou tentando selecionar um intervalo de arquivos usando um script interativo.

O objetivo final é usar o readcomando, mas para demonstração aqui atribuí a globvariável manualmente

#!/bin/bash
shopt -s extglob
# read -rp "Please enter a globbing string:"$'\n' glob

# This will give me an error (See below)
glob=*2020_04_03_{06..18}.jpg
/bin/ls -la /mnt/drive1/images/*/*/${glob}

# While this will return the desired files
/bin/ls -la /mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg

O erro é o seguinte:

Error /bin/ls: cannot access "/mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg": No such file or directory

Então, o que estou perdendo aqui ao atribuir a globvariável ou anexar a globvariável ao meu caminho?

Solução:

Encontrei uma solução, mas não sei bem por que, mas

bash <<EOF
/bin/ls -la /mnt/drive1/images/*/*/${glob} 
EOF

me dará a saída desejada.

Responder1

Você pode usar uma atribuição de array em vez de apenas uma variável.

shopt -s nullglob  ##: just in case there is non match for the glob.

glob=(*2020_04_03_{06..18}.jpg) ##: This will expand the glob * and brace expansion.

/bin/ls -la /mnt/drive1/images/*/*/"${glob[@]}"
  • Isso deve funcionar para o seu código de exemplo.

  • O problema surgirá quando você decidir substituir os números dentro da expansão da chave por uma variável que foi mencionada por @kusalananda, sobre a sequência de expansão.

  • Adicione a failglobopção shell se quiser ver um erro e saia com um valor diferente de zero se não houver nenhum padrão correspondente.

informação relacionada