배쉬 비교 및 ​​표현식 연산자


11

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

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

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

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

미리 감사합니다


2
최신 상태이며 많은 좋은 연습을 언급하는 매우 유용한 위키는 Greg 's wiki 입니다. Bash 안내서와 FAQ가 특히 유용합니다.

답변:


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그리고 다른 사람. 가장 좋은 방법은 맨 페이지를 보는 것입니다. 시간이 지나면 익숙해 져서 언제 이스케이프를 사용해야하는지 알게됩니다.


감사합니다. 하나 더 질문-((...))을 사용하여 비교할 수 있기 때문에-이 버전을 사용하는 것이 더 일반적입니다. if ((2> 1)) OR this : if [[2 -gt 1]]
MikeD

if [ 2 -gt 1 ]; …쉘 스크립트에서 이것을 더 자주보고 POSIX를 준수 한다는 것을 알기 때문에 더 일반적 이라고 가정 합니다.
qbi

명심해야 할 또 다른 사항은 expression이 0으로 평가 / 반환되면 [expression]은 true이지만 expression이 0이 아닌 것으로 평가 / 반환하면 ((expression))은 true입니다.
Joe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.