[완료] bash스크립트에서 빈문자열 체크 방법
글쓴이: nomail / 작성시간: 수, 2014/08/13 - 1:32오전
다른 사람 소스 보는데 궁금한게 있어서요.
bash스크립트에서 빈 문자열을 체크할 때 test를 사용하잖아요.
test -z "$1" test -n "$1"
저는 보통 위와 같은 방법으로 사용하는데 어떤 분은
if [[ x$1 == x ]]; then
위와 같이 쓰기도 하던데 처음에는 헷갈려서 무슨 말인가 했거든요.
보기 쉽게 test 코드를 쓰던가 아니면 $1 == "" 처럼 직관적인게 좋을 것 같은데..
굳이 2번째 방법처럼 쓰는 이유는 뭔가요?
Forums:
음 ..
옛날 어딘가 별도로 null check 를 지원하지 않던 shell 에서 파생되어 나온 유산이 아닐까 합니다.
습관적으로 손가락이 기억하는 대로 그렇게 쓰시는 분들도 있을거고..
그거 말고도 다른 방법도 많으니.. 큰 의미를 두실 필요는 없을 것 같네요.
그렇다고 굳이 일부러 그렇게 쓰실 필요도 없구요.. 편하신대로..
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
답글 감사드립니다. 그렇다면 현재는 test코드만으로
답글 감사드립니다.
그렇다면 현재는 test코드만으로 문제가 없겠네요. 오래된 sh도 test는 지원할테니..
github의 유명한 소스를 보면 가끔 그런 코드들이 보여서 뭔가 중요한 의미가 있는 줄 알았습니다.
제가 쉘스크립트를 배울 때는 아래와 같이 사용하지
제가 쉘스크립트를 배울 때는 아래와 같이 사용하지 않으면
$1이 빈문자열이거나 정의되지 않으면 다음과 같은 오류가 나옵니다.
따라서 항상 밑의 형식을 사용했습니다.
현대적인 쉘의 이중 대괄호를 사용하면 그럴 필요가 없는데,
아마도 습관(또는 무지) 때문이 아닐런지요.
내 블로그: http://unipro.tistory.com
답글 감사드립니다. 첫번째 코드는 저도 모를 때 많이
답글 감사드립니다.
첫번째 코드는 저도 모를 때 많이 겪었던 문제였습니다. c언어 하신 분들은 대부분 해당되실 듯.. ^^
오래된 sh도 test는 동작할테니 이렇게만 한다면 문제가 없을 것 같네요.
$1이 -n -p 등처럼 option 문자열처럼
$1이 -n -p 등처럼 option 문자열처럼 들어올 경우, 혼동을 피하기 위함입니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
답글 감사드리구요.죄송한지만 제가 잘 이해가 안돼서
답글 감사드리구요.
죄송하지만 제가 잘 이해가 안돼서 그러는데 부연설명 조금만 부탁드려도 될까요? ㅜㅜ
test $foo = ... 의 의도는, 변수
test $foo = ... 의 의도는, 변수 foo의 값과 ...가 같은지 검사하는게 목적입니다. 그런데 만약 변수 foo에 "-z"등처럼 command option처럼 보이는 값이 들어 있을 경우,
test $foo = ...
=>
test -z = "..."
가 되고, test가 -z를 operand가 아닌, option으로 보게 될 경우, 문제가 발생할 수 있습니다. (주로 오래된 test(1)의 경우)
x를 붙이면,
test x$foo = x...
=>
test x-z = x...
가 되어, option처럼 보이는 문자열도 정상적으로 처리됩니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
고맙습니다^^ 말씀 들어보니 정확히
고맙습니다^^
말씀 들어보니 정확히 알겠습니다.
테스트 코드를 만들어서 확인해보니까 test $1 = 'abc' 이 코드실행할 때 에러는 안 뜹니다만
$1에 옵션형태로 값이 들어온다면 test -e = 'abc'와 같은 형태로 되어 의도하지 않은 버그가 생길수도 있겠네요.
x$1 = x 형태는 참 기발한 발명 같습니다^^
댓글 달기