Error global debido a espacios en blanco

Error global debido a espacios en blanco

Mi variable de directorio

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

Mi declaración:

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

Parece que el espacio en blanco en la 'carpeta sin título' interfiere con el globo. Sospecho esto porque file0 termina siendo '/sin título'. Tenga en cuenta que tengo 'shopt -s extglob'.

Respuesta1

No es realmentearruinando el globbing. Aquí, al usar $POSTMAPsin comillas, estás usando el operador split+glob.

Con el valor predeterminado de $IFS, en su /work/Documents/Projects/untitled\ folder/untitled\ folder/*/*_tsta.bam, primero lo dividirá en "/work/Documents/Projects/untitled\"y . Sólo el tercero contiene caracteres comodín y, por tanto, estará sujeto a la parte global. Sin embargo, el globo simplemente buscaría archivos en el directorio relativo al directorio actual."folder/untitled\""folder/*/*_tsta.bam"folder

Si solo desea la globparte y no la splitde ese split+globoperador, configúrelo $IFSen la cadena vacía. Para ese operador, la barra invertida no se puede usar para escapar $IFSde los separadores (con bash(y bashsolo entre shells tipo Bourne), aunque se puede usar para escapar de los operadores globales comodín).

Entonces cualquiera de las dos:

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...

O probablemente sea mejor aquí con shells que admitan matrices 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....

información relacionada