이 맥락에서 ${1:0:2}는 무엇을 의미합니까?

이 맥락에서 ${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

답변1

이는 쉘의 하위 문자열 확장(매개변수 확장의 하위 클래스) 모드입니다.

형식은 다음과 같습니다.

${parameter:offset:length}

그리고 인덱스는 0부터 시작합니다.

변수가 있고 처음 두 문자(위치 0에서 다음 2까지)를 생성한다고 가정 foo합니다 ${foo:0:2}.

예:

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

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

따라서 귀하의 경우에는 "${1:0:2}"다음과 같습니다.

  • 첫 번째 문자인 인덱스 0부터 부분 문자열 추출을 시작합니다.

  • 다음 두 문자로 계속 진행하세요.

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

출력 하위 문자열이 다른 문자열과 같은지 확인 [ "${1:0:2}" != $rowArgName ]합니다 .[ "${1:0:2}" != $colArgName ]

답변2

발췌 man bash:

${매개변수:오프셋:길이}

하위 문자열 확장. 지정된 문자에서 시작하는 length값의 최대 문자 까지 확장됩니다. 인수가 인덱스 배열이거나 연관 배열 이름인 경우 아래 설명과 같이 결과가 다릅니다. 생략하면 지정된 문자로 시작하여 값의 끝까지 확장되는 값의 하위 문자열로 확장됩니다. 및 산술 표현식입니다(아래 산술 평가 참조).parameteroffset@@*lengthparameteroffsetlengthoffset

답변3

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

변수 FOO가 있는 경우 해당 값의 처음 두 문자를 볼 수 있습니다 ${FOO:0:2}. 귀하의 예에서 첫 번째 매개변수는 동일한 작업을 수행합니다.

관련 정보