이 glob 표현식에서 콜론을 제거하는 방법은 무엇입니까?

이 glob 표현식에서 콜론을 제거하는 방법은 무엇입니까?

"title"이라는 변수에 이름이 저장된 "Hello World: The Simplest Program"이라는 파일이 있다고 가정합니다.

전역 패턴 일치와 일치시키고 싶지만 콜론을 제거합니다. 즉, "Hello World Simplest Program"과 일치하고 싶습니다.

다음을 사용하여 이 작업을 수행할 수 있다는 것을 알았습니다.

${/:/|${title}|}

작동하지만 이유를 이해하지 못합니다.

"|"는 OR라는 것을 알고 있으므로 "${/:/}", "${${title}}" 또는 "${}"와 일치하는 것처럼 보이지만 둘 중 어느 것도 제거에 없는 것 같습니다. 콜론.

그래서 제 질문은 위의 전역 패턴 일치 표현식이 제목에서 콜론을 어떻게/왜 제거합니까?입니다.

편집: 제가 사용하고 있는 쉘은 Steam ROM Manager라는 점을 언급하고 싶습니다. 제가 틀린 것 같습니다. glob 표현식이 아니라 (기본 정규식 구문 대신) glob 구문을 선택적으로 사용하는 Steam ROM 파서 함수 변수입니다. Steeldiver와 ilkkachu에게 감사드립니다!

답변1

귀하의 질문에 있는 표현은 다음과 같습니다.전역 표현, 이는 분명히Steam ROM 파서 함수 변수저것선택적으로패턴 일치 시퀀스로 기본 정규식 구문 대신 glob 구문을 사용합니다.

표현은 다음과 같은 형태이다.

${/pattern/|input|}

pattern변수 확장 과 같습니다. 이 경우에는 삼항 조건으로 이해되어야 합니다.:input${title}|

|on match|no match(optional)

so는 in ${/:/|${title}|}의 일치 항목을 일치시키고 아무것도 없는 것으로 바꾸는 것을 의미합니다.:${title}

쉘 글롭이나 정규식 구문에서는 특별하지 않기 때문에 :이를 설정했는지 아니면 다른 것으로 설정했는지는 실제로 중요하지 않습니다.Parser Typeglob

답변2

Bash에서 당신이 가지고 있다고 가정하고 title="Hello World: The easiest program", 당신이 사용한다면매개변수 확장이와 같이:

echo ${title/:/}

그것은 인쇄될 것이다

Hello World The easiest program

${title/:/}"매개변수 제목을 가져오지만 처음에는 ':'이 있고 하위는 ''에 있습니다(즉, 아무것도 없습니다)."라고 말합니다.

아래와 같이 extra /를 사용하면 ${title//:/}모든 항목이 대체됩니다.

title="Hello World: The easiest:::::: program"
echo ${title//:/}
Hello World The easiest program

분명한 대안이 있습니다:

title="Hello World: The easiest:::::: program"
echo ${title//:/*}
Hello World* The easiest****** program

관련 정보