명령줄에서 작업할 때 Bash 스크립트가 실패함

명령줄에서 작업할 때 Bash 스크립트가 실패함

문자열 검색 매개변수가 다른 문자열에 나타나는지 테스트하기 위해 기본 bash 함수를 작성했습니다. 명령줄에서 실행하면 예상된 결과가 나타납니다. 쉘 스크립트에서 동일한 명령을 실행하면 실패합니다. 누군가 내 접근 방식에 어떤 문제가 있는지 말해 줄 수 있습니까?

me@mylaptop $ line='someidentifier 123                     another identifier 789 065             theend'
me@mylaptop $ sarg='+([0-9])+([ ])another identifier'
me@mylaptop $ type strstr
strstr is a function
strstr ()
{
   [ "${1#*$2*}" = "$1" ] && return 1;
   return 0
}
me@mylaptop $ strstr "$line" "$sarg" ; echo "$?"
0
me@mylaptop $

내 스크립트:

me@mylaptop $ cat l.sh
#!/bin/bash

function strstr ()
{
   [ "${1#*$2*}" = "$1" ] && return 1;
   return 0
}

line='someidentifier 123                     another identifier 789 065             theend'
sarg='+([0-9])+([ ])another identifier'

echo '==='"$line"'==='

echo '==='"$sarg"'==='

strstr "$line" "$sarg"

echo "$?"

me@mylaptop $ ./l.sh
===someidentifier 123                     another identifier 789 065             theend===
===+([0-9])+([ ])another identifier===
1
me@mylaptop $

답변1

대화형 셸에서는 셸 옵션을 활성화 했지만 extglob스크립트에서는 활성화하지 않았습니다.

$ strstr "$line" "$sarg" ; echo "$?"
1
$ shopt -s extglob
$ strstr "$line" "$sarg" ; echo "$?"
0

함수를 다음과 같이 단순화할 수 있습니다.

strstr () {
    [ "${1#*$2*}" != "$1" ]
}

관련 정보