programing

Bash에서 문자열을 비교하는 방법

lastcode 2023. 5. 22. 21:07
반응형

Bash에서 문자열을 비교하는 방법

변수를 문자열과 비교하는 방법(및 일치하는 경우 수행)

if 문에서 변수 사용

if [ "$x" = "valid" ]; then
  echo "x has the value 'valid'"
fi

일치하지 않을 때 작업을 수행하려면 대체=와 함께!=문자열 연산 및 산술 연산에 대한 자세한 내용은 해당 설명서를 참조하십시오.

인용문을 사용하는 이유는 무엇입니까?$x?

당신은 견적을 원합니다.$x빈 경우 Bash 스크립트에서 아래와 같은 구문 오류가 발생하기 때문입니다.

if [ = "valid" ]; then

의 비표준 사용==교환입니다.

Bash에서 허용하는 항목==와의 평등을 위해 사용되는[하지만 이것은 표준이 아닙니다.

따옴표가 있는 첫 번째 경우 중 하나를 사용합니다.$x선택 사항:

if [[ "$x" == "valid" ]]; then

또는 두 번째 경우를 사용합니다.

if [ "$x" = "valid" ]; then

또는 다른 조항이 필요하지 않은 경우:

[ "$x" == "valid" ] && echo "x has the value 'valid'"
a="abc"
b="def"

# Equality Comparison
if [ "$a" == "$b" ]; then
    echo "Strings match"
else
    echo "Strings don't match"
fi

# Lexicographic (greater than, less than) comparison.
if [ "$a" \< "$b" ]; then
    echo "$a is lexicographically smaller then $b"
elif [ "$a" \> "$b" ]; then
    echo "$b is lexicographically smaller than $a"
else
    echo "Strings are equal"
fi

주의:

  1. 사이의 공백if그리고.[그리고.]중요한
  2. >그리고.<리디렉션 연산자이므로 이를 사용하여 이스케이프합니다.\>그리고.\<현에 대하여 각각

문자열을 와일드카드와 비교하려면 다음을 사용합니다.

if [[ "$stringA" == *"$stringB"* ]]; then
  # Do something here
else
  # Do something here
fi

저는 한 가지 점에서 의견 중 하나에 동의하지 않을 수 없습니다.

[ "$x" == "valid" ] && echo "valid" || echo "invalid"

아니요, 그것은 미친 사람이 아닙니다.

그냥 처음 보는 사람처럼 보이는 것뿐이야 음, 처음 보는 사람이...

그것은 어떤 면에서 공통된 패턴을 언어로 사용합니다.

그리고 당신이 언어를 배운 후에.

사실, 읽는 것은 좋습니다.

이것은 논리 연산자에 대한 게으른 평가라는 한 가지 특별한 부분이 있는 간단한 논리식입니다.

[ "$x" == "valid" ] && echo "valid" || echo "invalid"

각 부분은 논리식입니다. 첫 번째 부분은 참이거나 거짓일 수 있으며, 나머지 두 부분은 항상 참입니다.

(
[ "$x" == "valid" ] 
&&
echo "valid"
)
||
echo "invalid"

이제 평가할 때 첫 번째 항목이 선택됩니다.만약 거짓이라면, 논리의 두 번째 피연산자와 &&관련이 없는 후에.첫 번째는 사실이 아니기 때문에, 어쨌든 첫 번째와 두 번째는 사실일 수 없습니다.
자, 이 경우에는 논리의 첫 번째 면이 됩니다. ||거짓입니다. 하지만 반대쪽인 세 번째 부분이 사실이라면 사실일 수 있습니다.

그래서 세 번째 부분은 주로 부작용으로 메시지를 쓰는 것으로 평가될 것입니다. (결과가 나왔습니다.)0우리가 여기서 사용하지 않는 것은 사실입니다.)

다른 사례들은 비슷하지만, 더 단순합니다 - 그리고 - 약속합니다! - 읽을 수 있습니다!
(저는 가지고 있지 않지만, 회색 수염을 가진 UNIX 베테랑이 되는 것이 이것에 많은 도움이 된다고 생각합니다.

다음 스크립트는 "test on this"라는 이름의 파일을 한 줄씩 읽은 다음 각 줄을 단순 문자열, 특수 문자가 있는 문자열 및 정규식과 비교합니다.일치하지 않으면 스크립트가 행을 인쇄하고 일치하지 않으면 행을 인쇄합니다.

Bash의 공간은 매우 중요합니다.따라서 다음과 같은 작업이 가능합니다.

[ "$LINE" != "table_name" ] 

하지만 다음은 그렇지 않습니다.

["$LINE" != "table_name"] 

따라서 다음과 같이 사용하십시오.

cat testonthis | while read LINE
do
if [ "$LINE" != "table_name" ] && [ "$LINE" != "--------------------------------" ] && [[ "$LINE" =~ [^[:space:]] ]] && [[ "$LINE" != SQL* ]]; then
echo $LINE
fi
done

use case/esac을 사용할 수도 있습니다.

case "$string" in
 "$pattern" ) echo "found";;
esac

Bash 4개 이상의 예.참고: 따옴표를 사용하지 않으면 단어에 공백 등이 포함될 때 문제가 발생합니다.항상 바시, IMO로 인용합니다.

다음은 Bash 4+의 몇 가지 예입니다.

예 1, 문자열에서 '예'를 확인합니다(대소문자 구분 안 함).

    if [[ "${str,,}" == *"yes"* ]] ;then

예 2, 문자열에서 '예'를 확인합니다(대소문자 구분 안 함).

    if [[ "$(echo "$str" | tr '[:upper:]' '[:lower:]')" == *"yes"* ]] ;then

예 3, 문자열에서 '예'를 확인합니다(대소문자 구분).

     if [[ "${str}" == *"yes"* ]] ;then

예 4, 문자열에서 '예'를 확인합니다(대소문자 구분).

     if [[ "${str}" =~ "yes" ]] ;then

예 5, 정확한 일치(대소문자 구분):

     if [[ "${str}" == "yes" ]] ;then

예 6, 정확한 일치(대소문자 구분 안 함):

     if [[ "${str,,}" == "yes" ]] ;then

예 7, 정확한 일치:

     if [ "$a" = "$b" ] ;then

즐거운 시간 되세요.

입력에 유효한 항목이 몇 개만 있으면 regexp 일치 항목을 사용할 것입니다.예: "시작" 및 "중지"만 유효한 작업입니다.

if [[ "${ACTION,,}" =~ ^(start|stop)$ ]]; then
  echo "valid action"
fi

" 를수변표로시다니합자소문다▁the"는 로 씁니다.$ACTION이중 쉼표를 사용하여.또한 이 방법은 너무 오래된 bash 버전에서는 사용할 수 없습니다.

Bash 및 Dash와 호환되는 방법으로 수행했습니다(sh).

testOutput="my test"
pattern="my"

case $testOutput in (*"$pattern"*)
    echo "if there is a match"
    exit 1
    ;;
(*)
   ! echo there is no coincidence!
;;esac

저는 한동안 같은 상황과 씨름하고 있었습니다. 제가 해결할 수 있는 방법은 다음과 같습니다.

   if [ "$var1" == "$var2" ]; then
      #dowhateveryouwant
    fi
  

비교 부호 앞뒤에 남은 공백을 주의하십시오. 그렇지 않으면 작동하지 않거나 예상치 못한 결과를 얻을 수 있습니다.

저는 등호(=) 하나를 사용하는 데 너무 많은 시간을 소비했지만 작동하지 않았습니다.도움이 되길 바랍니다.

비교 문제가 있습니까?(아래와 같이?)

var="true"
if [[ $var == "true" ]]; then
  # It should be working, but it is not...
else
  # It is falling here...
fi

=~ 연산자(정규식 연산자)처럼 해보면 다음과 같이 작동할 수 있습니다.

var="true"
if [[ $var =~ "true" ]];then
  # Now it works here!!
else
  # No more inequality
fi

Bash regex 연산자 =~ (공식 참조)
StackOverflow 추가 예제(여기)

언급URL : https://stackoverflow.com/questions/2237080/how-to-compare-strings-in-bash

반응형