
내 디렉터리 변수
POSTMAP="/work/Documents/Projects/untitled\ folder/untitled\ folder/*/*_tsta.bam"
내 for 문:
for file0 in ${POSTMAP}; do
...
'제목 없는 폴더'의 공백이 글로빙을 엉망으로 만드는 것 같습니다. file0이 '/제목 없음'으로 끝나기 때문에 이것이 의심됩니다. 'shopt -s extglob'이 있다는 점에 유의하세요.
답변1
정말 그렇지 않아요글로빙을 엉망으로 만들다. 여기서는 $POSTMAP
따옴표를 사용하지 않고 분할+글로브 연산자를 사용하고 있습니다.
의 기본값을 사용하면 $IFS
먼저 , 및 /work/Documents/Projects/untitled\ folder/untitled\ folder/*/*_tsta.bam
으로 분할됩니다 . 세 번째 항목에만 와일드카드 문자가 포함되어 있으므로 glob 부분이 적용됩니다. 그러나 glob은 현재 디렉터리를 기준으로 디렉터리의 파일만 검색합니다."/work/Documents/Projects/untitled\"
"folder/untitled\"
"folder/*/*_tsta.bam"
folder
해당 연산자 의 glob
일부만 원하고 은(는) 원하지 않는 경우 빈 문자열로 설정하세요. 해당 연산자의 경우 백슬래시는 구분 기호를 이스케이프하는 데 사용할 수 없습니다 ( Bourne과 유사한 쉘에서만). 하지만 와일드카드 glob 연산자를 이스케이프하는 데 사용할 수 있습니다.split
split+glob
$IFS
$IFS
bash
bash
따라서 다음 중 하나를 수행하십시오.
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...
아니면 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....