쉘 읽기 명령줄 매개변수 ${1,,}는 무엇을 의미합니까?

쉘 읽기 명령줄 매개변수 ${1,,}는 무엇을 의미합니까?

쉘 스크립트 코드에서는 아래와 같이 명령줄 매개변수가 변수에 할당됩니다. 문장에 있는 쉼표(,)는 무엇을 의미하나요? Bash 스크립트에서 명령줄 인수를 읽을 때 두 개의 쉼표를 추가하면 어떤 차이가 발생합니까?

#!/bin/bash
var1=${1,,}
var2=${2,,}

./script.sh value1 value2

답변1

그것은매개변수 확장라고케이스 수정(바라보다 man bash).

$var1첫 번째 인수는 소문자로 변환된 모든 문자와 함께 포함됩니다. Single은 ,매개변수의 첫 번째 문자만 변경합니다.

다음과 같은 소문자 모음과 같이 쉼표 뒤의 각 문자에 대한 패턴을 지정할 수 있습니다.

x=$(echo {A..Z})
echo ${x,,[AEIOU]}

산출:

a B C D e F G H i J K L M N o P Q R S T u V W X Y Z

대칭적으로 대문자로 변환을 사용할 수 있습니다 ^.

답변2

man bash | grep -B1 -A10 ,,
       ${parameter,pattern}
       ${parameter,,pattern}
              Case modification.  This expansion modifies the case  of  alpha‐
              betic  characters in parameter.  The pattern is expanded to pro‐
              duce a pattern just as in pathname expansion.  Each character in
              the  expanded value of parameter is tested against pattern, and,
              if it matches the pattern, its case is converted.   The  pattern
              should  not  attempt  to  match  more than one character.  The ^
              operator converts lowercase letters matching pattern  to  upper‐
              case; the , operator converts matching uppercase letters to low‐
              ercase.  The ^^ and ,, expansions convert each matched character
              in  the expanded value; the ^ and , expansions match and convert
              only the first character in the expanded value.  If  pattern  is
              omitted,  it is treated like a ?, which matches every character.
              If parameter is @ or  *,  the  case  modification  operation  is
              applied  to each positional parameter in turn, and the expansion
              is the resultant list.  If parameter is an array  variable  sub‐
              scripted with @ or *, the case modification operation is applied
              to each member of the array in turn, and the  expansion  is  the
              resultant list.

관련 정보