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


19

아래 표시된 코드를 살펴보고 행 / 열 인수가 -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

7
질문에 사용중인 쉘을 포함시켜야합니다. 아마입니다 bash.
Raphael Ahrens

2
이것은 명령 줄 인수를 구문 분석하기 위해 수행 된 것으로 보입니다. 아마 당신에 대해 알고 싶은 것 getopt또는 getopts당신의 쉬운 삶 (또는 이런 짓을 누구 이건의 수명을) 할 수 있습니다.
Carlos Campderrós

답변:


31

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

형식은 다음과 같습니다.

${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가 다른 캐릭터와 동일한 경우 체크된다.


1
기본적으로는 여부를 사용자가 확인됩니다에 $ 1을 (를) 제공 -c또는 -r, 아마 더 나은 구현되어있는getopts
세르지 Kolodyazhnyy

15

작은 추출물 man bash:

$ {parameter : offset : 길이}

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


5

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.