이 코드가 있습니다.
dirname=
if [ -d $dirname ];
then
cd $dirname && rm *
fi
보시다시피이 빈 변수가 있습니다. 제가 알고 싶은 것은이 빈 변수와 같은 것을 단일 대괄호와 함께 사용할 때 모든 사용자의 홈 디렉토리 파일을 제거하는 이유입니다.
그리고 이중 대괄호를 사용하면 사용자의 홈 디렉토리 파일이 제거되지 않습니다.
이렇게
dirname=
if [[ -d $dirname ]];
then
cd $dirname && rm *
fi
단일 대괄호와 이중 대괄호를 모두 사용할 때 차이점 구문을 읽었습니다.
왜 이런 일이 발생하는지 알 수 있습니까?
때 cd
인수를 전달되지 않습니다, 그것은 (대부분의 경우, 사용자의 홈 디렉토리를 기본 디렉토리로 변경됩니다 $HOME
).
이 질문의 흥미로운 부분은 -d
bash test
또는 [
내장 연산자 에게 아무것도 전달하지 않으면 bash가 0으로 종료되는 것처럼 보입니다 (제 생각에는 이것은 예상치 못한 것입니다).
dirname
빈 변수로 설정하면 기본적으로 다음을 실행합니다.
if [ -d ]; then
cd && rm *
fi
나에게는이 if
블록 안의 코드 가 실행 된다는 것이 놀랍지 만 내 컴퓨터에서 그 코드 가 실행되었음을 확인할 수 있습니다. 위의 설명에서 설명 했듯이은 더 이상 연산자로 test
해석하지 않으며 -d
null이 아닌 문자열이기 때문에 단순히 0을 반환합니다. 이러한 종류의 동작을 방지하는 한 가지 방법은 변수를 인용하는 것입니다.
if [ -d "$dirname" ]; then
cd "$dirname" && rm *
fi
이 경우 $dirname
비어 있으면 0이 아닌 종료 코드를 올바르게 평가하는 연산자에 전달 ""
되어 -d
블록 내부의 코드가 실행되지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다