Erro de globulação devido ao espaço em branco

1

Minha variável de diretório

POSTMAP="/work/Documents/Projects/untitled\ folder/untitled\ folder/*/*_tsta.bam"

Minha declaração:

for file0 in ${POSTMAP}; do
...

Parece que o espaço em branco em 'pasta sem título' mexe com o globbing. Eu suspeito disso porque file0 acaba sendo '/ untitled'. Note que tenho 'shopt -s extglob'.

    
por ozarka 19.02.2016 / 10:32

1 resposta

4

Não é realmente bagunçar a globbing . Aqui, usando $POSTMAP sem aspas, você está usando o operador split + glob.

Com o valor padrão de $IFS , no seu /work/Documents/Projects/untitled\ folder/untitled\ folder/*/*_tsta.bam , ele será dividido primeiro em "/work/Documents/Projects/untitled\" , "folder/untitled\" e "folder/*/*_tsta.bam" . Apenas o terceiro contém caracteres curinga e, portanto, está sujeito à parte glob. No entanto, o glob apenas procuraria por arquivos no diretório folder relativo ao diretório atual.

Se você deseja apenas a parte glob e não o operador split desse split+glob , defina $IFS como a string vazia. Para esse operador, a barra invertida não pode ser usada para escapar de $IFS separadores (com bash (e bash apenas entre shells parecidos com Bourne), ele pode ser usado para escapar de glob globals embora).

Então:

POSTMAP="/work/Documents/Projects/untitled folder/untitled folder/*/*_tsta.bam"
IFS=   # don't split
set +f # do glob
for file0 in $POSTMAP # invoke the split+glob operator
do...

Ou provavelmente melhor com shells compatíveis com matrizes como bash , yash , zsh , ksh :

postmap=(
  '/work/Documents/Projects/untitled folder/untitled folder/'*/*_tsta.bam
) # expand the glob at the time of that array assignment
for file0 in "${postmap[@]}" # loop over the array elements
do....
    
por 19.02.2016 / 10:42