2012-04-20 3 views
1

예기치 않은 오류 : 문자열로비교 디렉토리 이름 난 변수 비교하기 위해 노력하고

DIR=$(pwd | cut -d '/' -f7,8) 

을 :

NAME="IOPs/All_Brush" 

내 문 인 경우 :

if [ $DIR <> $NAME ]; then 
    blah blah 
fi 

이 오류는 다음과 같이 반환됩니다.

line 18: IOPs/All_Brush: No such file or directory 

여기에 무슨 일이 일어나고 있습니까? 나는 아주 기본적인 것을 잊어 버렸을 것이라고 확신하지만, 나는 그 순간을 잃어 버렸다. 나는 슬래시를 벗어날 생각을했지만 작동하지 않았다.

답변

2

<>은 비교 연산자가 아니라 양방향 리다이렉션이다. 공백이나 다른 특수 문자가있는 경우 따옴표를 사용하고 [[을 사용하는 것이 이상적입니다.

if [[ "$DIR" != "$NAME" ]]; then 
    : do something here 
fi 
+0

'[['는 POSIX가 아니며 bash에만 해당됩니다. – c00kiemon5ter

+0

@ c00kiemon5ter,'[['. '에 대해서는 http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html을 참조하십시오. 그래서, 그것은 quasistandard의 무언가입니다. (실제로 나는 그것이 POSIX가 아니라 SVID라고 생각합니다.) – geekosaur

+0

'[['는 분명히 POSIX가 아닙니다. Bash 및 Korn 쉘에서만 작동합니다. '['는'if' 구문의 일부가 아니므로'if' 구문의 일부가 아닙니다. '[''명령은''[''는 쉘 키워드입니다. 나는 SVID가 그것을 정의하는지 모른다. – c00kiemon5ter