
Meine Verzeichnisvariable
POSTMAP="/work/Documents/Projects/untitled\ folder/untitled\ folder/*/*_tsta.bam"
Meine for-Aussage:
for file0 in ${POSTMAP}; do
...
Es scheint, dass das Leerzeichen im „unbenannten Ordner“ das Globbing durcheinander bringt. Ich vermute das, weil file0 am Ende „/unbenannt“ ist. Beachten Sie, dass ich „shopt -s extglob“ habe.
Antwort1
Es ist nicht wirklichmit dem Globbing durcheinander bringen. Wenn Sie hier $POSTMAP
keine Anführungszeichen verwenden, verwenden Sie den Operator „Split+Glob“.
Mit dem Standardwert von wird $IFS
Ihr zuerst in , und aufgeteilt . Nur der dritte Teil enthält Platzhalterzeichen und unterliegt daher dem Glob-Teil. Der Glob würde jedoch nur im Verzeichnis relativ zum aktuellen Verzeichnis nach Dateien suchen./work/Documents/Projects/untitled\ folder/untitled\ folder/*/*_tsta.bam
"/work/Documents/Projects/untitled\"
"folder/untitled\"
"folder/*/*_tsta.bam"
folder
Wenn Sie nur den glob
Teil und nicht den split
des split+glob
Operators möchten, setzen Sie es $IFS
auf die leere Zeichenfolge. Für diesen Operator kann der Backslash nicht verwendet werden, um $IFS
Trennzeichen zu maskieren (bei bash
(und bash
nur bei Bourne-ähnlichen Shells) kann er jedoch verwendet werden, um Platzhalter-Glob-Operatoren zu maskieren).
Also entweder:
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...
Oder hier wahrscheinlich besser mit Shells, die Arrays wie bash
, yash
, zsh
, unterstützen 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....