csh: 테스트 대신 -d를 매개변수로 사용

csh: 테스트 대신 -d를 매개변수로 사용

-d /path/to/dir나는 명령을 사용하여 test디렉토리를 확인할 수 있다는 것을 알고 있습니다 . 그 다음에:

if ( $argv[1] == "-d" )

그래서 작동하지 않습니다.

-d그러나 이를 스크립트에 매개변수로 전달할 수 있어야 합니다 . -d매개변수로 전달할 수 있도록 특수 속성을 비활성화하려면 어떻게 해야 합니까 ?

답변1

"$var"큰따옴표 나 :q연산자를 사용하세요 $var:q.


csh변형 에서는 변수가 대체될 때 변수가 없습니다.큰따옴표, 그 결과는 명령 또는 파일 이름 대체로 확장됩니다(이는 POSIX 쉘에서도 마찬가지입니다. 큰따옴표를 잊어버리면 스크립트가재갈을 물린그리고 많은 사람들로 이어진다보안 영향). 그래서:

if ( "$argv[1]" == "-d" ) echo 1

작동합니다. 더 나은 방법은 :q연산자를 사용하여 개행을 처리하는 것입니다.

if ( $argv[1]:q == "-d" ) echo 1

답변2

이 문제는 명령문 앞에 더미 문자를 추가하여 해결되었습니다. 이와 같이:

if ( X$argv[1] == "X-d" ).

답변3

-d특별한 속성이 없으므로 아무것도 비활성화할 필요가 없습니다.

cuonglm이 언급했듯이, 보고 있는 오류는 $argv[1]변수를 잘못 참조했기 때문에 발생하는 것이지 -d증거는 다음과 같습니다.

$ csh 
% if ( "-d" == "-d" ) echo true
true
% if ( -d == "-d" ) echo true
if: Missing file name.

관련 정보