하위 문자열은 올바르게 일치하는 bash 스크립트입니다.

하위 문자열은 올바르게 일치하는 bash 스크립트입니다.

파일 이름과 파일에 포함된 문자열이 포함된 bash 스크립트가 있고 파일의 하위 문자열을 파일 이름(tar.gz)과 비교하여 일치하는지 확인하려고 합니다.

substr=$(echo "$(cat /home/user/configrc | grep Version)" | cut -d '_' -f4-5)
xfile="/home/user/data_1806_01.tar.gz"
echo $substr
echo $xfile
echo "Is $substr in $xfile"

if [ "$xfile" == *"$substr"* ]; then echo "Match"; else echo "No Match"; fi

출력은 다음과 같습니다

DD_DATA_AB_1806_01
1806_01
/home/user/data_1806_01.tar.gz
 in /home/user/data_1806_01.tar.gz
No Match

일치 항목을 찾을 수 없습니다. 1806_01은 DD_DATA_AB_1806_01에 하위 문자열 일치 항목이 있어야 합니다. 또한 이상하게도 echo "Is $substr in $xfile" 줄이 올바르게 인쇄되지 않습니다. - "Is $substr" 또는 "Is 1806_01"이 누락되었습니다.

substr 끝에 일종의 종료가 필요합니까?

configrc 파일에는 Version=DD_DATA_AB_1806_01 행이 포함되어 있습니다.

나는 온라인에서 많은 예를 보았지만 내가 뭘 잘못하고 있는지 알 수 없습니다 ... 정말 간단한 질문입니다 ...

매우 감사합니다:)

센토스 7.2

답변1

주석에서 언급했듯이 문자열의 echo및 to가 필요하지 않으며 이러한 유형의 비교에는 두 개의 괄호가 필요합니다.catgrep

substr=$(grep 'Version' /home/user/configrc | cut -d '_' -f4-5)
xfile="/home/user/data_1806_01.tar.gz"

if [[ "$xfile" == *"$substr"* ]]; then
  echo "Match"
else
  echo "No Match"
fi

관련 정보