csh if 문 대화형 사용

csh if 문 대화형 사용

내 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때문에 약간 수상쩍다는 점을 명심하세요 .ifcsh

에서는 내장 함수가 별도의 파서를 호출하여 명령문을 완전히 읽을 때까지 읽습니다 csh.if

FreeBSD 및 Linux와 달리 cshSolaris의 바이너리는 동일하지 않지만 tcsh다릅니다. 그러나 tcsh이는 솔라리스에서도 마찬가지입니다.

일반적으로 csh는 일관성이 없습니다. 예를 참조하세요.http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/

관련 정보