공백으로 인한 와일드카드 오류

공백으로 인한 와일드카드 오류

내 디렉토리 변수

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과 유사한 쉘에서만) 와일드카드 전역 연산자를 이스케이프하는 데 사용할 수 있습니다.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있습니다 .zshksh

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

관련 정보