foreach를 사용하여 a_condition*과 일치하는 하위 폴더 이름을 검색하면 다음이 정상적으로 작동합니다.
foreach i (a_condition*)
echo $i
end
a_condition1 a_condition2...를 인쇄합니다.
하지만 a_conditon*을 하드코딩하지 않고 시도하면 다음과 같습니다.
set condition = a_condition*
foreach i ($condition)
echo $i
end
첫 번째 값만 인쇄합니다. 왜 이런 일이 발생합니까?
답변1
csh
내가 알고 있는 모든 구현/버전에서:
set condition = a_condition*
동일합니다:
set condition = (a_condition*)
즉, glob 확장으로 인한 모든 파일 이름을 포함하는 배열을 생성합니다 a_condition*
. PDP11 에뮬레이터의 2BSD에서 원래 1979년 구현을 확인했는데 csh
결과는 동일했습니다.
당신이 설명하는 동작은 라인이 다음과 같이 해석되는 것처럼 보입니다.
set condition = a_condition1 a_condition2 a_condition3...
즉, condition
값이 있는 변수 와 a_condition1
이름이 지정된 변수를 a_condition2
정의 합니다 a_condition3
. 유사한 동작을 갖는 구현을 인식하지 못하며 csh
원래 구현과 같이 그러한 구현이 존재할 가능성이 거의 없습니다. 아니요, 그렇다면 시도해 볼 수 있습니다. 이것:
set condition = (a_condition*)
이것이 변화를 가져오는지 확인하세요. 이것은 또한 더 자기 설명적일 것입니다.
어쨌든 할당 시 글로브를 확장하고 루프가 요소를 반복하도록 하려면 구문은 다음과 같습니다.
set condition = (a_condition*)
foreach i ($condition:q)
echo $i:q
end
condition
포함하고 싶다면a_condition*
끈, 그리고 문자열은 반복하는 동안 glob으로 확장됩니다. 즉:
set condition = 'a_condition*'
foreach i ($condition)
echo $i:q
end