디렉터리의 모든 파일/디렉터리를 반복하려고 합니다. 여기에는 모든 숨겨진 파일( .
및 제외 ..
)도 포함됩니다. Bash의 이전 주제에서 다음을 사용하는 것이 좋습니다.
for current in $1/$run_folder/{..?,.[!.],}*;
echo current
done
나는 그것을 시도했지만 tcsh
작동하지 않았습니다. 어떻게 해야 합니까 tcsh
?
답변1
나는 거의 사용하지 않지만 옵션 1을 사용하면 원하는 것을 얻을 tcsh
수 있습니다 .globdot
globdot (+) If set, wild-card glob patterns will match files and directo‐ ries beginning with `.' except for `.' and `..'
그래서
#!/bin/tcsh
set globdot
foreach current ($1:q/$run_folder:q/*)
printf '%s\n' $current:q
end
잘못될 수도 있으니 주의하세요일치하지 않음디렉터리에 숨겨지지 않은 파일이 없으면 오류가 발생합니다.
이 문제는 함께 일치하는 것으로 알려진 와일드카드를 포함하여 해결할 수 있습니다 *
.
#!/bin/tcsh
set globdot
set files = (/de[v] $1:q/$run_folder:q/*)
shift files
foreach current ($files:q)
printf '%s\n' $current:q
end
그런데 올바른 구문 은 다음과 bash
같습니다.
#! /bin/bash -
shopt -s nullglob dotglob
for current in "$1/$run_folder"/*; do
printf '%s\n' "$current"
done
echo
임의의 데이터에 사용할 수 없는 주변 따옴표를 확장하는 것을 잊어버렸고 , 기본적으로 일치하지 않는 전역 변수를 실수로 남겨 두었습니다. 이 dotglob
옵션( csh/tcsh/zsh 와 동일 globdot
)은 이러한 3가지 다른 glob이 필요하지 않습니다.
노트:
(+)
기능이 있음 을 나타냅니다 ."대부분의 csh(1) 구현(특히 4.4BSD csh)에서는 찾을 수 없습니다."