
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 $POSTMAP
sin 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 glob
parte y no la split
de ese split+glob
operador, configúrelo $IFS
en la cadena vacía. Para ese operador, la barra invertida no se puede usar para escapar $IFS
de los separadores (con bash
(y bash
solo 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....