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