공백으로 인한 Globbing 오류

공백으로 인한 Globbing 오류

내 디렉터리 변수

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 연산자를 이스케이프하는 데 사용할 수 있습니다.splitsplit+glob$IFS$IFSbashbash

따라서 다음 중 하나를 수행하십시오.

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

관련 정보