
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 $POSTMAP
sem 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 folder
diretório relativo ao diretório atual.
Se você deseja apenas a glob
parte e não a split
parte desse split+glob
operador, defina $IFS
como uma string vazia. Para esse operador, a barra invertida não pode ser usada para escapar $IFS
de separadores (com bash
(e bash
apenas 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....