${3#?}는 무엇을 하나요?

${3#?}는 무엇을 하나요?

다음 변수 할당이 포함된 스크립트가 있습니다.

TEST_VARIABLE=${3#?}

기능은 무엇입니까 ${3#?}?

답변1

이를 매개변수 확장이라고 합니다.

  1. $3스크립트/함수의 세 번째 매개변수인 변수입니다.
  2. #변수의 가장 짧은 접두사가 제거됩니다.
  3. ?찾고 있는 패턴입니다(이 경우에는 모든 문자).

3따라서 기본적으로 패턴을 찾을 때까지 지정된 변수의 가장 짧은 접두사를 제거합니다 .

일반적으로 다음을 고려할 수 있습니다.

${variable_name[option][pattern]}

다음과 같은 다른 옵션이 있습니다.

  • ##가장 큰 접두사를 제거합니다.
  • %가장 짧은 접미사를 제거합니다.
  • %%가장 큰 접미사를 제거합니다.

예를 들어 이를 다른 패턴과 결합하여 CSV 행의 마지막 필드를 얻을 수 있습니다.

> string="asdf,1234,aa,foo22"
> echo ${string##*,}
foo22

"쉼표가 뒤따르는 모든 문자" 검색 패턴의 최대 접두사를 어떻게 제거했는지 참고하세요.

답변2

> set -- 1 2 foo
> echo "$3"
foo
TEST_VARIABLE=${3#?}
> echo "$TEST_VARIABLE"
oo

첫 번째 문자 없이 세 번째 위치 인수의 값을 변수에 할당합니다 TEST_VARIABLE(위치 인수 자체는 변경되지 않음).

./myscript 1 2 foo
# or
myfunc 1 2 foo
  # within each $3 is foo

대화형 셸에서 위치 매개변수를 가지려면 set.

관련 정보