기존 디렉터리에 대한 테스트가 존재하지 않는 디렉터리에 대한 테스트를 통과합니다.

기존 디렉터리에 대한 테스트가 존재하지 않는 디렉터리에 대한 테스트를 통과합니다.

행동

사용자 프로필에 환경 변수를 설정했습니다.

export DATADIR=<absolute path set with `readlink -e target`>

예상되는 결과

구성 파일을 다시 가져온 후 대상에 연결되어 있는지 확인합니다.

echo ${DATADIR}; ls ${DATADIR}

이것은 패스입니다. 제가 테스트를 해보면

test -d ${DATADIR} && echo yes || echo no

이것은통과할 것으로 예상됨그리고 (결과는 "이다")

예상치 못한 결과

그러나 왜곡된 이름과 같이 전혀 정의되지 않은 다른 디렉토리 이름을 제공하면 테스트는

test -d ${HJIWEODSB} && echo yes || echo no

나한테도 그렇다고 대답해줘, 그건예상치 못한 통과, 이 이름은 파일도 디렉터리도 아니기 때문입니다.

기대했던 결과를 다시 달성

실제로

test -d  && echo yes || echo no

'예'라고 하면 다음으로 시작하는 것 같아요.ls

질문

테스트를 위해 매뉴얼 페이지와 이 페이지를 보았습니다.생명선. 어쩌면 내가 그들에 대해 간과하고 있는 것일 수도 있습니다. 요약하자면, 디렉토리가 존재하는지에 대한 신뢰할 수 있는 테스트가 필요합니다. 수정 및 조언 환영합니다.


물론, 반대 투표를 하셔도 됩니다. 그러나 이것이 유용하지 않거나 불분명하거나 연구 노력이 없음을 나타내는 이유에 대한 제안은 감사하겠습니다.

답변1

사실 이 글을 쓴 덕분에 답을 찾았습니다.

예상된 결과를 얻으려면 변수 이름을 따옴표로 묶습니다.

test -d "${DATADIR}" && echo yes || echo no

주어진 반면

test -d "${GIBBERISH}" && echo yes || echo no

아니오.

(메타 댓글: 미래의 독자들이 도움을 받을 수 있기 때문에 내 질문을 삭제하지 않기로 결정했습니다. 중재자가 이것이 적절한지 결정하도록 하십시오.)

관련 정보