다음 변수 할당이 포함된 스크립트가 있습니다.
TEST_VARIABLE=${3#?}
기능은 무엇입니까 ${3#?}
?
답변1
이를 매개변수 확장이라고 합니다.
$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
.