bash 스크립트에서 정규 표현을 사용하여 테스트를 부정하려면 어떻게 해야 합니까?
GNU bash (버전 4.0.35 (1)-release (x86_64-suse-linux-gnu)를 사용하여 정규 표현으로 테스트를 무효화하고 싶습니다.예를 들어, 다음과 같이 경로가 아직 존재하지 않는 경우 PATH 변수에 경로를 조건부로 추가합니다.
TEMP=/mnt/silo/bin
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/Scripts:
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/local/bin
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
export PATH
이를 위한 방법은 수백만 가지가 있겠지만, 제가 알고 싶은 것은 (오류)와 같이 어떤 식으로든 조건이 부정될 수 있는지 여부입니다.
TEMP=/mnt/silo/bin
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/Scripts:
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/local/bin
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
export PATH
옳았어, 그냥 띄어쓰기만 하면 돼!및 그[[맘에 들다if ! [[
괄호 안에 느낌표를 넣을 수도 있습니다.
if [[ ! $PATH =~ $temp ]]
단, false positive를 줄이기 위해 패턴을 고정해야 합니다.
temp=/mnt/silo/bin
pattern="(^|:)$temp(:|$)"
if [[ ! $PATH =~ $pattern ]]
시작 또는 끝에 콜론을 붙이고(또는 둘 다) 일치하는 항목을 찾습니다.셸 변수와 이름이 충돌할 가능성을 줄이기 위해 소문자 또는 대소문자 혼합 변수 이름을 사용하는 것이 좋습니다.
가장 안전한 방법은 !를 regex 부정으로 삽입하는 것입니다.[[ ]]다음과 같습니다.
if [[ ! ${STR} =~ YOUR_REGEX ]]; then
그렇지 않으면 특정 시스템에서 실패할 수 있습니다.
네, SieveX가 이미 지적한 바와 같이 테스트를 무효로 할 수 있습니다.
그러나 이 경우 정규식을 사용하면 안 됩니다. 경로에 특수 문자가 포함되어 있으면 실패할 수 있습니다.대신 다음을 시도해 보십시오.
[[ ":$PATH:" != *":$1:"* ]]
이러한 경우 조건부 연산자를 사용하지 않고 코드를 단순화할 수 있습니다.
TEMP=/mnt/silo/bin
[[ ${PATH} =~ ${TEMP} ]] || PATH=$PATH:$TEMP
언급URL : https://stackoverflow.com/questions/4542732/how-do-i-negate-a-test-with-regular-expressions-in-a-bash-script
'programing' 카테고리의 다른 글
| 검색 수가 많을 때 vlookup을 최적화하는 방법(VLOOKUP 대체 방법) (0) | 2023.04.17 |
|---|---|
| WPF에서 [Save As]대화상자를 표시하려면 어떻게 해야 하나요? (0) | 2023.04.17 |
| 엔티티 컬렉션에 대한 IList vs IENumerable (0) | 2023.04.17 |
| Git 분기 명령이 'less'처럼 작동합니다. (0) | 2023.04.17 |
| WPF DatePicker는 기본적으로 오늘 날짜로 설정됩니다. (0) | 2023.04.17 |