2012-06-19 2 views
29

물고기의 두 문자열을 어떻게 비교합니까 (다른 언어로 "abc" == "def")?Fish 셸에서 문자열 동일성/문자열 비교를 테스트 하시겠습니까?

지금까지, 나는 contains의 조합이 case "what_i_want_to_match"와 (과 switch (contains "" $a$a이 빈 문자열 0 경우 그 날 위해 일 듯하지 않았지만 모든 경우에 반환 밝혀) 사용했습니다 및 case '*'). 이 방법들 중 어느 것도 특히 ... 올바른 것은 아닙니다.

+5

따라서 [''은 실제로는 명령입니다 (OS X의 경우/bin/[')이고 ** ** 다른 구문이있는 배시 내장형 인 경우). 그림을 이동! –

+0

이 댓글은 단지 내 하루를 만들었습니다! [명령은 정말 강력한 도구입니다. – yagooar

+4

필자는 개인적으로 모든 스크립트에서'['대신 'test'를 사용하기 시작 했으므로 언어의 일부가 아닌 외부 명령이라는 것이 분명합니다. ('test'와'['는 똑같은 툴입니다.) 물론'test '도 Bash의 내장 함수라고 생각합니다. –

답변

32
if [ "abc" != "def" ] 
     echo "not equal" 
    end 
    not equal 

    if [ "abc" = "def" ] 
     echo "equal" 
    end 

    if [ "abc" = "abc" ] 
     echo "equal" 
    end 
    equal 

또는 1 라이너 :

if [ "abc" = "abc" ]; echo "equal"; end 
equal 
+1

아하! 이상하게도 나는 전에 대괄호를 사용했다. 어쩌면 저를 던진 단 하나의'='일 수도 있습니다. –

+1

그래, 하나의 '='도 나를 던졌습니다. –

+2

짧은 라이너 :'[abc = abc]; 그리고 평등하게 에코 " – kzh

8

때때로 당신이 물고기 falsy 있습니다 빈 문자열 또는 정의되지 않은 변수, 확인하고 싶습니다.

set hello "world" 
set empty_string "" 
set undefined_var # Expands to empty string 

if [ $hello ] 
    echo "not empty" # <== 
else 
    echo "empty" 
end 

if [ $empty_string ] 
    echo "not empty" 
else 
    echo "empty" # <== 
end 

if [ $undefined_var ] 
    echo "not empty" 
else 
    echo "empty" # <== 
end 

또한 test 대신 [ 사용할 수 있습니다.

실용적인 예는 git 브랜치에 있는지 확인하는 것입니다.

function git_branch 
    echo (command git symbolic-ref HEAD ^/dev/null | sed -e 's|^refs/heads/||') 
end 

set --local branch_name (git_branch) 

if [ $branch_name ] 
    echo "$branch_name branch checked out" 
else 
    echo "not in a git repo" 
end