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
또는 else 절이 필요하지 않은 경우 :
[ "$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
메모:
- 사이의 공백
if
과[
및]
중요하다 >
및<
리디렉션 연산자이므로\>
및\<
문자열에 대해 각각 이스케이프하십시오 .
문자열을 와일드 카드와 비교하려면
if [[ "$stringA" == *$stringB* ]]; then
# Do something here
else
# Do Something here
fi
한 가지 의견 중 하나에 동의하지 않습니다.
[ "$x" == "valid" ] && echo "valid" || echo "invalid"
아니, 그건 미친 oneliner가 아닙니다
흠, 초심자에게 ...
어떤면에서는 공통 패턴을 언어로 사용합니다.
그리고 언어를 배운 후에.
사실 읽어서 좋네요
이것은 논리 연산자의 지연 평가라는 특별한 부분이있는 간단한 논리 표현식입니다.
[ "$x" == "valid" ] && echo "valid" || echo "invalid"
각 부분은 논리식입니다. 첫 번째는 참 또는 거짓 일 수 있고 다른 두 가지는 항상 참입니다.
(
[ "$x" == "valid" ]
&&
echo "valid"
)
||
echo "invalid"
Now, when it is evaluated, the first is checked. If it is false, than the second operand of the logic and &&
after it is not relevant. The first is not true, so it can not be the first and the second be true, anyway.
Now, in this case is the the first side of the logic or ||
false, but it could be true if the other side - the third part - is true.
So the third part will be evaluated - mainly writing the message as a side effect. (It has the result 0
for true, which we do not use here)
The other cases are similar, but simpler - and - I promise! are - can be - easy to read!
(I don't have one, but I think being a UNIX veteran with grey beard helps a lot with this.)
you can also use use case/esac
case "$string" in
"$pattern" ) echo "found";;
esac
following script reads from a file named "testonthis" line by line then compares each line with a simple string, a string with special characters and a regular expression if it doesn't match then script will print the line o/w not.
space in bash is so much important. so following will work
[ "$LINE" != "table_name" ]
but following won't:
["$LINE" != "table_name"]
so please use as is:
cat testonthis | while read LINE
do
if [ "$LINE" != "table_name" ] && [ "$LINE" != "--------------------------------" ] && [[ "$LINE" =~ [^[:space:]] ]] && [[ "$LINE" != SQL* ]]; then
echo $LINE
fi
done
I would probably use regexp matches if the input has only a few valid entries. E.g. only the "start" and "stop" are valid actions.
if [[ "${ACTION,,}" =~ ^(start|stop)$ ]]; then
echo "valid action"
fi
Note that I lowercase the variable $ACTION
by using the double comma's. Also note that this won't work on too aged bash versions out there.
Bash4+ examples. Note: not using quotes will cause issues when words contain spaces etc.. Always quote in bash IMO.
Here are some examples BASH4+ :
Example 1, check for 'yes' in string (case insensitive):
if [[ "${str,,}" == *"yes"* ]] ;then
Example 2, check for 'yes' in string (case insensitive):
if [[ "$(echo "$str" | tr '[:upper:]' '[:lower:]')" == *"yes"* ]] ;then
Example 3, check for 'yes' in string (case sensitive) :
if [[ "${str}" == *"yes"* ]] ;then
Example 4, check for 'yes' in string (case sensitive):
if [[ "${str}" =~ "yes" ]] ;then
Example 5, exact match (case sensitive):
if [[ "${str}" == "yes" ]] ;then
Example 6, exact match (case insensitive):
if [[ "${str,,}" == "yes" ]] ;then
Example 7, exact match :
if [ "$a" = "$b" ] ;then
enjoy.
I did it in this way that is compatible with 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
참고URL : https://stackoverflow.com/questions/2237080/how-to-compare-strings-in-bash
'development' 카테고리의 다른 글
INNER JOIN ON 대 WHERE 절 (0) | 2020.09.28 |
---|---|
XML 문서에서 이스케이프하려면 어떤 문자가 필요합니까? (0) | 2020.09.28 |
C ++에서 언제 클래스와 구조체를 사용해야합니까? (0) | 2020.09.28 |
파이썬에서 상수를 어떻게 생성합니까? (0) | 2020.09.28 |
Objective-C의 typedef 열거 형은 무엇입니까? (0) | 2020.09.27 |