Bash 4.3 OS X의 하위 문자열 음수 길이

Bash 4.3 OS X의 하위 문자열 음수 길이

Bash 4.2에는 음수 하위 문자열 길이에 대한 지원이 추가되었습니다.

http://tldp.org/LDP/abs/html/abs-guide.html#SUBSTREXTR01

예 37-12. 문자열 추출 구성의 음수 매개변수

"길이" 매개변수가 음수이면 끝에서 오프셋 매개변수로 사용됩니다.

예를 들어 다음은 Ubuntu에서 테스트할 때 "World"를 출력합니다.

STR="Hello World!"
echo ${STR:6:-1}

그러나 OS X(GNU bash, 버전 4.3.42(1)-릴리스(x86_64-apple-darwin14.5.0))에서 해당 사용법은 다음 오류를 생성합니다.

-1: substring expression < 0

이 OS X에만 해당됩니까, 아니면 이후 bash 업데이트에서 다시 비활성화되었습니까? OS X에서 이 기능을 활성화하는 방법이 있습니까?

답변1

flabdablet의 솔루션은 고정 길이 문자열에 대해서만 작동하지만 이를 동적 크기 문자열의 드롭인 대체품으로 사용할 수 있습니다.

echo ${STR:6:$((${#STR} - 6 - 1))}

상세히:

  • ${#STR}문자열의 길이를 반환합니다.
  • $((a - b - c))수학적 뺄셈을 합니까
  • ${STR:start:len}하위 문자열을 반환합니다.

따라서 하위 문자열 표현식에 두 번째 인수를 결합하면 문자열 길이에서 시작 오프셋을 빼고 새로운 bash 구문에서 음수 값으로 지정하는 값을 뺀 값이 됩니다.

답변2

${STR:6:${#STR}-7}은 STR이 최소 7자를 포함하도록 보장되는 경우 ${STR:6:-1}에 대해 작동하는 드롭인 대체품이어야 합니다. 더 짧을 수 있다면 OS X bash가 음수 길이에 대해 불평하거나 오른쪽에서 오프셋으로 사용되는 음수 길이를 지원하는 bash 버전에서 끔찍하게 잘못된 결과를 초래할 수도 있습니다.

답변3

길이를 입력으로 계산하여 동적으로 끝 부분을 절단하는 것이 가능합니다.

${STR:0:${#STR}-2}

-2는 음수입니다.

답변4

Google에서 검색한 내용여기:

그들은 ${STR:6:$#-1}잘 작동해야 한다고 말해요

내 경우에는 비슷한 오류가 발생하여 ${VERSION::-2}다음과 같이 0을 추가한 후 작동하기 시작했습니다 ${VERSION:0:-2}.

관련 정보