다음 명령을 사용하는 스크립트를 이해하려고 합니다. set -- ${line#?}
. 나는 set 명령과 중괄호를 이해합니다. 하지만 "#?"에 대한 설명을 찾을 수 없습니다. 부분.
답변1
${line#?}
에서 표준 매개 sh
변수 확산 연산자(Korn 쉘에서 시작됨)는 단순히 변수에서 첫 번째 문자를 제거합니다 line
. 예를 들어:
$ line=abc; echo "${line#?}"
bc
보다 일반적 ${variablename#word}
으로 ,word
시작콘텐츠 variablename
. 이것은 ... 불리운다접두사 제거. word
glob으로 처리됩니다. 즉, ?
모든 단일 문자가 일치함을 의미합니다.
문서
man bash
( 인터프리터 bash
의 GNU 구현은 어디에 있습니까 ? sh
):
${parameter#word}
${parameter##word}
일치하는 접두사 패턴을 제거합니다. 경로 이름 확장에서와 같이 패턴을 생성하기 위해 확장 되고word
아래 패턴 일치에 설명된 규칙을 사용하여 인수의 확장된 값과 일치됩니다. 패턴이 매개변수 값의 시작 부분과 일치하는 경우 확장 결과는 가장 짧은 일치 패턴(case#
) 또는 가장 긴 일치 패턴(##
case) 이 제거된 매개변수의 확장된 값입니다. 인수가@
or 인 경우*
패턴 제거 작업이 각 위치 인수에 차례로 적용되고 확장이 결과 목록이 됩니다. 인수가@
또는 로 인덱싱된 배열 변수인 경우*
패턴 제거 작업은 배열의 각 멤버에 차례로 적용되고 확장은 결과 목록입니다.
내레이터: 접미사 제거
좋아 ${parameter#word}
하고 ${parameter##word}
한다접두사제거되었습니다. 쉘이 제공하는 다른 기능 ${parameter%word}
과 기능을 아는 것이 ${parameter%%word}
도움이 됩니다.접미사이동하다. 접미사 제거는 일반적으로 파일 이름에서 확장자를 제거하는 데 사용됩니다.
$ name=file.jpg; echo "${name%.jpg}"
file