배쉬 비교 및 ​​표현식 연산자 왜 사용해야하는지 모르겠습니다. test, [[

나는 bash 프로그래밍을 처음 사용합니다. 나는 길고 좋은 두 가지 가이드를 읽었지만 연산자와 키워드에 대해 머리를 어지럽 혔습니다.

어느 것이 더 일반적이고 널리 사용됩니까? 언제, 왜 사용해야하는지 모르겠습니다.

  1. test, [[ ]]또는 [ ]심지어(( ))
  2. $((exp)) 또는 $[exp]
  3. -gt또는 >, ge또는 >=등등
  4. 때 사용 <하고 >또는 ( )우리는 그것을 탈출해야 할 때 \: \< \(
  5. ==또는 =(문자열 비교)

나는 사이의 기본적인 차이를 알고 [[[다른 질문이 나에게 신비하지만합니다.

미리 감사합니다



답변

  • test주어진 조건에 대해 (분명히) 테스트하는 쉘 내장입니다. 일부 오래된 쉘에는 특별한 명령이 필요합니다. 에서 프로그램을 찾을 수도 있습니다 /usr/bin/test.
  • [또한 어떤 상태를 테스트하는 프로그램입니다. 이 소프트웨어는 또한 닫는 괄호가 필요하며에서 찾을 수 있습니다 /usr/bin/[.
  • [[…]]test및 의 대안 [입니다. Korn 쉘 ( ksh)을 위해 개발되었습니다 . 그러나 2보다 큰 Bash 버전과 Z Shell에서도 찾을 수 있습니다. 이중 괄호에는 몇 가지 멋진 기능이 있습니다.
    • 쉘은 단어 분할이나 파일 이름 확장을하지 않습니다.
    • 인용이 필요 없습니다.
    • 대신 -a(AND) 또는 -o(OR)을 사용할 수 있습니다 &&또는 ||.
    • =더 많은 작업을 수행 할 수 있습니다.
  • ((…))와 같습니다 let. 기본적으로 ((expression))와 같습니다 let "expression". 그러나 let둘 이상의 표현식을 사용할 수 있지만 이중 중괄호는 하나의 표현식 만 허용합니다.
  • $((…))(및 $[…])도 일부 계산을 수행합니다. 쉘은 중괄호 안의 표현식을 계산하려고 시도하고 표현식을 결과로 바꿉니다. 따라서로 echo $((1+1))이어집니다 echo 2. 따라서 껍질은 숫자 2를 인쇄합니다.

때마다 당신은 당신이 대시와 두 글자 (와 옵션을 사용해야하는 두 숫자를 비교하고자 할 때 -ge, -lt등). 문자열을 비교하려면 =또는 을 사용해야합니다 !=.

탈출에 관한 귀하의 질문은 대답하기가 매우 어렵습니다. 쉘 이외의 소프트웨어에 의존하기 때문입니다. 즉 grep, grep -E다른 탈출이 필요합니다. 이것은 또한과 사건 sed, awk그리고 다른 사람. 가장 좋은 방법은 맨 페이지를 보는 것입니다. 시간이 지나면 익숙해 져서 언제 이스케이프를 사용해야하는지 알게됩니다.