Erro de globbing devido a espaços em branco

Erro de globbing devido a espaços em branco

Minha variável de diretório

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

Minha declaração for:

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

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

Responder1

Não é realmentebagunçando o globbing. Aqui, usando $POSTMAPsem aspas, você está usando o operador split+glob.

Com o valor padrão de $IFS, em seu /work/Documents/Projects/untitled\ folder/untitled\ folder/*/*_tsta.bam, ele será primeiro dividido 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 arquivos no folderdiretório relativo ao diretório atual.

Se você deseja apenas a globparte e não a splitparte desse split+globoperador, defina $IFScomo uma string vazia. Para esse operador, a barra invertida não pode ser usada para escapar $IFSde separadores (com bash(e bashapenas entre shells do tipo Bourne), mas pode ser usada para escapar de operadores glob curinga).

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 aqui com shells que suportam 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....

informação relacionada