이 문맥에서 $ {1 : 0 : 2}는 무엇을 의미합니까? 열 인수가

아래 표시된 코드를 살펴보고 행 / 열 인수가 -r또는로 시작하는지 여부를 입력을 확인합니다 -c. ${1:0:2}이 맥락에서 무엇을 의미합니까?

rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
   echo $correctCmdMsg >&2
   exit 1
fi


답변

쉘의 서브 스트링 확장 (파라미터 확장의 서브 클래스) 패턴입니다.

형식은 다음과 같습니다.

${parameter:offset:length}

색인은 0에서 시작합니다.

예를 들어, 변수 가 있고 처음 두 문자 foo${foo:0:2}생성합니다 (위치 0에서 다음 2).

예:

$ foo=spamegg
$ echo "${foo:0:2}"
sp

귀하의 경우 첫 번째 숫자 1는 변수 이름을 나타냅니다. 변수 이름 $1은 명령 줄 (주 프로그램에서)을 통해 전달 된 첫 번째 인수 또는 함수에 전달 된 첫 번째 인수입니다.

따라서 귀하의 경우 "${1:0:2}":

  • 인덱스 0부터 시작하여 하위 문자열 추출 시작, 즉 첫 문자

  • 다음 두 문자까지 계속

따라서 작업 후에 입력 문자열의 처음 두 문자 (0과 1로 색인 됨)를 얻게됩니다.

[ "${1:0:2}" != $rowArgName ][ "${1:0:2}" != $colArgName ]출력 subtring가 다른 캐릭터와 동일한 경우 체크된다.


답변

작은 추출물 man bash:

$ {parameter : offset : 길이}

부분 문자열 확장 . 로 지정된 문자에서 시작 length값의 문자 까지 확장합니다 . parameter가 , 또는로 첨자 된 인덱스 배열 또는 연관 배열 이름 인 경우 결과는 아래와 같이 다릅니다. 생략 하면 지정된 문자에서 시작 하여 값의
끝까지 확장되는 값의 하위 문자열로 확장됩니다 . 및 산술 표현식 (아래 산술 EVALUATION 참조)이다.parameteroffset@@*lengthparameteroffsetlengthoffset


답변

변수에서 간단한 하위 문자열 추출입니다. 해당 변수는 스크립트의 첫 번째 매개 변수입니다 ( 1).

변수 FOO가 있으면 값으로 처음 두 문자를 볼 수 있습니다 ${FOO:0:2}. 첫 번째 인수를 사용하여 예제에서 동일한 작업을 수행합니다.