programing

Bash의 'if' 문에서 두 문자열 변수를 비교하려면 어떻게 해야 합니까?

codeshow 2023. 4. 12. 22:39
반응형

Bash의 'if' 문에서 두 문자열 변수를 비교하려면 어떻게 해야 합니까?

나는 그것을 얻으려고 노력하고 있다.ifBash에서 동작하는 스테이트먼트(Ubuntu 사용):

#!/bin/bash

s1="hi"
s2="hi"

if ["$s1" == "$s2"]
then
  echo match
fi

는 여러 요.if, " "[["$s1" == "$s2"]]와 없는 , " " " , " 를 사용합니다.=,== ★★★★★★★★★★★★★★★★★」-eq그래도 다음 오류가 나타납니다.

[hi: 명령을 찾을 수 없습니다.

여러 사이트와 튜토리얼을 보고 복사해 봤지만 작동하지 않습니다.무엇을 잘못하고 있는 걸까요?

저는 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아,$s1$s2떻게게 하면 ?? ???

그냥 공간만 좀 계산해 봤는데...:/ 포함이라고 하는 은?

나는 노력했다.

if [[ "$s1" == "*$s2*" ]]

하지만 그것은 작동하지 않았다.

문자열 등식을 비교하려면 다음 명령을 사용합니다.

if [[ "$s1" == "$s2" ]]

문자열이 비교와 같지 않은 경우 다음을 사용합니다.

if [[ "$s1" != "$s2" ]]

님의 ab: , "사용방법:

if [[ $s1 == *"$s2"* ]]

(기호 사이에 공백을 넣어야 합니다).

불량:

if [["$s1" == "$s2"]]

양호:

if [[ "$s1" == "$s2" ]]

[] 기호와 큰따옴표 사이에 공백으로 두어야 합니다.변수에 다음 항목이 포함되어 있습니다.

if [ "$s1" == "$s2" ]; then
#   ^     ^  ^     ^
   echo match
fi

^ 할 .

공백이 필요합니다.

if [ "$s1" == "$s2" ]

나는 이것을 추천한다.

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

열기/기호 괄호와 변수 사이의 공백과 '=' 기호를 둘러싼 공백에 주목하십시오.

또한 스크립트 헤더에 주의하십시오.다른 것을 사용하든 말든

#!/bin/bash

또는

#!/bin/sh

여기 소스가 있습니다.

Bash 4+의 예.주의: 단어에 공백 등이 포함되어 있는 경우 따옴표를 사용하지 않으면 문제가 발생합니다.항상 Bash IMO에서 인용합니다.

다음은 Bash 4+의 예를 제시하겠습니다.

예 1, 문자열에 'yes'가 있는지 확인합니다(대문자와 소문자가 구분되지 않음).

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

예 2, 문자열에 'yes'가 있는지 확인합니다(대문자와 소문자가 구분되지 않음).

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

예 3, 문자열에 'yes'가 있는지 확인합니다(대문자와 소문자가 구분됩니다).

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

예 4, 문자열에 'yes'가 있는지 확인합니다(대문자와 소문자가 구분됩니다).

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

예 5, 완전 일치(대문자와 소문자가 구분됨):

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

예 6, 완전 일치(대문자와 소문자가 구분되지 않음):

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

예 7, 완전 일치:

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

에는 이미 답이 , 서는 싱글 등호 equal)를 하는 것에 것 .= ) equals ( ( ) 。== in )의 표시

if [ "$s1" == "$s2" ]

주요 차이점은 사용하는 스크립트 언어에 있습니다. 를 하고 있는 는, Bash 를 합니다.#!/bin/bash 시작 하십시오.filename.bash. 를 실행하려면 , 를 사용합니다.bash filename.bash- 그럼 을 사용해야 합니다.==.

sh 를 사용하고 있는 경우는,#!/bin/sh스크립트를 다음과 같이 저장합니다.filename.sh. 사용방법sh filename.sh- 싱글을 사용해야 합니다.=. 혼재시키지 마십시오.

제안합니다.

#!/bin/bash

s1="hi"
s2="hi"

if [ $s1 = $s2 ]
then
  echo match
fi

큰따옴표 없이 오직 한 만 같다.

$ if [ "$s1" == "$s2" ]; then echo match; fi
match
$ test "s1" = "s2" ;echo match
match
$

지금은 Linux 박스에 접속할 수 없지만[(그리고 Bash가 내장되어 있는) 프로그램이기 때문에, 그 사이에 공간을 둘 필요가 있다고 생각합니다.[및 첫 번째 파라미터입니다.

또한 문자열 등호 연산자는 단일인 것 같습니다.=.

이건 대답이라기보다 더 명확해!네, 단서는 다음 오류 메시지에 있습니다.

[hi: 명령을 찾을 수 없습니다.

이는 "hi"가 ""에 연결되었음을 나타냅니다.

기존 프로그래밍 언어와는 달리 Bash에서는 ""는 더 명백한 "ls"와 같은 명령어입니다.- 기호라고 해서 특별히 취급되는 것은 아닙니다.따라서 질문의 바로 옆에 있는 ""와 (대체된) $s1"이 결합되어 있습니다(Bash는 올바른 명령어입니다).그런 다음 해당 위치에 있는 명령어를 검색합니다.[hi] - Bash는 알 수 없습니다.

C 및 기타 언어에서 ""는 다른 "문자 클래스"로 간주되며 다음 "hi"와 분리됩니다.

따라서 " " 뒤에 공백이 필요합니다.

용도:

#!/bin/bash

s1="hi"
s2="hi"

if [ "x$s1" == "x$s2" ]
then
  echo match
fi

내부에 스트링을 추가하면 안전성이 높아집니다.

한 줄 명령어에 다른 표기법을 사용할 수도 있습니다.

[ "x$s1" == "x$s2" ] && echo match

순수 Bash와 미포함 버전의 경우test하지만 정말 못생겼어, 해봐:

if ( exit "${s1/*$s2*/0}" )2>/dev/null
then
   echo match
fi

설명:( )추가 서브셸이 열립니다.일치하는 경우는 0으로 종료하고 일치하지 않는 경우는 $s1로 종료하려고 합니다.이것에 의해 에러가 발생합니다(어색하게).이 에러는, 다음의 주소로 송신됩니다./dev/null.

언급URL : https://stackoverflow.com/questions/4277665/how-do-i-compare-two-string-variables-in-an-if-statement-in-bash

반응형