문자열 검색 매개변수가 다른 문자열에 나타나는지 테스트하기 위해 기본 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" ]
}