bash + 정규식을 사용하여 문자열 비교

bash + 정규식을 사용하여 문자열 비교

내 Bash 스크립트에서 문자열이 디스크인지 확인하고 싶습니다.

그래서 다음 예제를 만들었습니다.

if [[ $disk =~ sd{a..z} ]];then
echo "we found a disk - $disk
.
.
.
.
fi

그러나 실제로 표현식은 $disk를 인식하지 못합니다($disk는 예를 들어 sda sdb sdc sdd 등일 수 있음).

예를 들어

disk=sdb
[[ $disk =~ sd{a..z} ]] && echo "$disk is real disk"

그만큼 좋지 않음

[[ $disk =~ 'sd{a..z}' ]] 

내가 어디서 잘못됐나요?

답변1

=~매뉴얼의 이진 연산자입니다.3.2.5.2 조건부 구성:

"==" 및 "!="와 우선순위가 동일한 추가 이항 연산자 "=~"를 사용할 수도 있습니다. 사용시 연산자 오른쪽에 있는 문자열POSIX 확장 정규식으로 처리됩니다.[...]

{a..z}중괄호 확장 3.5.1입니다.지원 확장:

중괄호 확장은 임의의 문자열을 생성할 수 있는 메커니즘입니다.


그래서 당신은정규식문자열과 일치하는 패턴:

$ disk=sdb    
$ [[ $disk =~ ^sd[a-z]$ ]] && echo "$disk is real disk"
$ sdb is real disk

관련 정보