GNU bash (버전 4.0.35 (1)-릴리스 (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 ]]
그러나 오 탐지를 줄이기 위해 패턴을 고정해야합니다.
temp=/mnt/silo/bin
pattern="(^|:)${temp}(:|$)"
if [[ ! "${PATH}" =~ ${pattern} ]]
콜론으로 시작하기 전이나 끝에 콜론 (또는 둘 다)으로 일치하는 부분을 찾습니다. 쉘 변수와 이름이 충돌 할 가능성을 줄이기 위해 소문자 또는 대소 문자 변수 이름을 사용하는 것이 좋습니다.
답변
가장 안전한 방법은! 다음 [[ ]]
과 같은 정규 표현식 부정에 대해 :
if [[ ! ${STR} =~ YOUR_REGEX ]]; then
그렇지 않으면 특정 시스템에서 실패 할 수 있습니다.