변수를 문자열과 비교하는 방법은 무엇입니까?
답변
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"
아니, 그건 미친 사람이 아니야
그것은 시작되지 않은 사람처럼 보입니다.
어떤 방식으로 공통 패턴을 언어로 사용합니다.
그리고 당신은 언어를 배운 후에.
실제로, 읽기 좋네요
논리 연산자의 지연 평가와 같은 특별한 부분을 가진 간단한 논리식입니다.
[ "$x" == "valid" ] && echo "valid" || echo "invalid"
각 부분은 논리적 표현입니다. 첫 번째는 참 또는 거짓 일 수 있고, 다른 두 가지는 항상 참입니다.
(
[ "$x" == "valid" ]
&&
echo "valid"
)
||
echo "invalid"
이제 평가 될 때 첫 번째가 확인됩니다. 이 논리의 두 번째 피연산자보다, false 인 경우 와 &&
후에는 관련이 없습니다. 첫 번째는 사실이 아니므로 첫 번째가 될 수 없으며 두 번째는 사실이 될 수 없습니다.
이제이 경우 논리의 첫 번째면 이거나 ||
거짓이지만 다른면 (세 번째 부분)이 참이면 사실 일 수 있습니다.
따라서 세 번째 부분은 주로 부작용으로 메시지를 작성하여 평가됩니다. ( 0
실제 결과 는 여기에서 사용하지 않습니다)
다른 경우도 비슷하지만 더 간단합니다. 약속합니다! 쉽게 읽을 수 있습니다!
(하나는 없지만 회색 수염을 가진 유닉스 베테랑이되면 많은 도움이 될 것입니다.)
답변
유스 케이스 / esac을 사용할 수도 있습니다
case "$string" in
"$pattern" ) echo "found";;
esac
답변
다음 스크립트는 “testonthis”라는 파일을 한 줄씩 읽은 다음 각 줄을 간단한 문자열, 특수 문자가있는 문자열 및 정규식과 비교합니다. 일치하지 않으면 스크립트가 줄을 인쇄하고 그렇지 않으면 줄을 인쇄합니다.
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