Bash의 다중 문자열 비교

Bash의 다중 문자열 비교
    ROOTPATH="/path/here"
    p1 = "file1"
    p2 = "file2"

    for file in `find $ROOTPATH type f`; do
    if [["$file" =~ $p1]]; then
      echo 'got p1'
    elif [["$file" =~ $p2]]; then
      echo 'got p1'
    else

    echo 'got nothing'

실패하는데 이유를 모르겠습니다. 및 $p1둘 다 $p2문자열이고 파일도 문자열입니다.

나는 (2) 문자열을 비교하여 두 개의 별도 조건 에 존재하는지 $p1확인 하려고 합니다 .p2$file

내가 뭘 잘못했나요?

답변1

"유형별 검색" 연산자를 사용하는 데 find필요한 구문이 누락되었습니다.

for file in $(find "$ROOTPATH" -type f); do

p1및 변수 에 대한 할당이 p2구문상 올바르지 않습니다.

p1="file1"    # Assigns the value 'file1' to the variable p1
p1 = "file1"  # Attempts to execute `p1` with arguments '=' and 'file1'

또한 두 명령문 모두 동일하므로 사용 사례에 따라 두 번째 사례에 대한 명령을 변경 echo해야 할 수도 있습니다 .echo

또한 명령문의 구문에 if결함이 있으며 [[태그 앞뒤에 공백 문자나 명령 구분 기호가 필요합니다 ]].

답변2

구문을 수정하세요.

ROOTPATH="/path/here"
p1="file1"
p2="file2"

for file in `find $ROOTPATH -type f`; 
do
    if [[ $file =~ $p1 ]]; 
    then
        echo "got p1"
    elif [[ $file =~ $p2 ]]; 
    then
        echo "got p2"
    else
        echo "got nothing"
    fi
done

마련하다

  • 변수 할당에서 공백 제거
  • -type바꾸다type
  • 사용으로 인해 "변수에서 제거됨$file[[
  • 추가된 공백( [[ $file& p1 ]])
  • 추가 fidone종료

주석에 언급된 대로 find명령 루프 사용에 주의하세요.

관련 정보