"${var,,}"의 쉼표는 무엇을 의미하나요?

"${var,,}"의 쉼표는 무엇을 의미하나요?
read -p "Enter yes/no   " SOMEVAR

SOMEVAR=`"echo ${SOMEVAR,,}"`

위의 코드는 나에게 ${SOMEVAR,,}: bad substitution오류를 제공합니다.

답변1

${variable,,}매개변수 확장은 모든 문자가 소문자인 셸의 값 으로 확장됩니다 . 이 코드를 실행할 때 "잘못된 교체" 오류가 발생한다는 점을 고려하면 실제로는$variablebash

  • 해당 쉘을 사용하지 않지만 가능합니다 /bin/sh(항상 그런 것은 아님 bash). 하지만 오류가 발생하지 않는다는 것은 read -p오류가 발생할 가능성이 더 높다는 것을 의미합니다.
  • bashbash이 확장을 지원하지 않는 이전 버전(버전 4에 도입됨)을 사용하십시오 .

확장의 일반적인 형태는 ${variable,,pattern}일치하는 모든 문자를 소문자로 변환하는 것입니다(대문자로 변환하기 위해).$variablepattern^^

$ str="HELLO"
$ printf '%s\n' "${str,,[HEO]}"
heLLo

bash시스템 설명서 도 참조하세요 .


이전 버전의 경우 bash다음을 수행하여 변수 값을 소문자로 만들 수 있습니다.

variable=$( tr 'A-Z' 'a-z' <<<"$variable" )

tr이는 "here-string"을 사용하여 변수 값을 전달함으로써 수행됩니다. 이 유틸리티는 trto ASCII 범위(C/POSIX 로케일 가정)의 모든 문자를 to 범위의 해당 문자로 음역합니다.AZaz


또한 참고하시기 바랍니다

SOMEVAR=`"echo ${SOMEVAR,,}"`

다음과 같이 쓰는 것이 더 낫다

SOMEVAR=${SOMEVAR,,}

실제로, 공백( 사용자 입력이 가는 곳)을 포함하는 bash이름의 명령이 없으면 버전 4+에서 작성한 내용에 "명령을 찾을 수 없음" 오류가 발생합니다 . 이는 큰따옴표로 묶인 문자열을 실행하려는 명령 대체 때문입니다.echo stringstring

관련 정보