내 Solaris 10 csh 구현에 문제가 있습니다.만약에또는 나는 올바른 것을 얻지 못하고 있습니다(글쎄, 적어도 내 경우에는 두 번째 것이 가장 가능성이 높습니다). 그러나 내가 그렇게 하면:
% if 1 then <enter>
%
=> 아무 일도 일어나지 않았다
내가 이것을 할 때 :
% if 0 then
?
=> 첫 번째 상황에서도 그렇게 예상했어요. 그렇지 않으면 나는 다음을 얻지 않고는 내 진술의 구성을 완료할 수 없습니다.
if: improper then
"csh를 사용하지 마십시오"로 찬성 답변을 시작하지 말라고 정말로 간청해도 될까요? 정말로 원한다면 이것으로 끝내셔도 됩니다. 지난 몇 년 동안 csh는 지금까지 대화형 목적으로 나에게 많은 도움을 줬고, 내가 작성한 이 작은 스크립트에서는 Bourne 셸이나 bash를 사용했습니다.
감사해요
답변1
먼저, endif
닫을 보류 중인 if(s)가 없으면 (csh에서) 아무런 작업도 수행할 수 없다는 점을 이해하십시오. 실행해도 아무런 효과가 없습니다.
% endif
%
따라서 if 뒤에 오는 명령이 실행될 것이 분명한 경우(c에서와 마찬가지로 csh의 경우 값이 1이므로) 실행을 지연할 필요가 없으며 즉시 "허용"됩니다. :
% if (1) then
% echo yes
yes
% echo no
no
% endif
endif
그러나 false 값(0)의 경우 a가 실행될 때까지 실행이 회피됩니다 .
% if (0) then
? echo yes
? echo no
? endif
%
이것이 csh가 작동하는 방식입니다.
참고: 동의하지 if: improper then
않습니다 if 0 then
. 어쩌면 오류가 다른 곳에 있을 수도 있습니다.
편집하다
흠... 아마도 약간의 설명이 필요할 것 같습니다. 내가 작성하는 경우( <enter>
명확성을 위해 추가하기 전에 공백을 추가하고 무시하십시오):
% if 0 then <enter> !!!!!!!!!!!!!
? echo Hello there
? echo Yes
? endif
%
오류가 발생하지 않습니다.
내가 쓴다면 :
% if 0 then echo Hello there <enter> !!!!!!!!!!!!!
% if: Improper then.
나는 당신의 실수를 이해합니다.
답변2
이 값은 셸 수준 값 1
과 동일합니다 .FALSE
또한 이는 키워드가 아니라 내장 명령 이기 csh
때문에 약간 수상쩍다는 점을 명심하세요 .if
csh
에서는 내장 함수가 별도의 파서를 호출하여 명령문을 완전히 읽을 때까지 읽습니다 csh
.if
FreeBSD 및 Linux와 달리 csh
Solaris의 바이너리는 동일하지 않지만 tcsh
다릅니다. 그러나 tcsh
이는 솔라리스에서도 마찬가지입니다.
일반적으로 csh는 일관성이 없습니다. 예를 참조하세요.http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/