Bash의 'if' 문에서 두 문자열 변수를 비교하려면 어떻게 해야 합니까?
나는 그것을 얻으려고 노력하고 있다.if
Bash에서 동작하는 스테이트먼트(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" ]]
님의 a
b
: , "사용방법:
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
'programing' 카테고리의 다른 글
어떻게 하면 한 사용자의 커밋만 git 로그를 볼 수 있나요? (0) | 2023.04.12 |
---|---|
performSelector의 셀렉터를 알 수 없기 때문에 누수가 발생할 수 있습니다. (0) | 2023.04.12 |
cociapods - '팟 설치'에 시간이 오래 걸린다. (0) | 2023.04.12 |
SQL 서버에서 NULL = NULL이 false로 평가되는 이유 (0) | 2023.04.07 |
WCF 클라이언트의 블록 사용 문제에 대한 최선의 회피책은 무엇입니까? (0) | 2023.04.07 |