아래 표시된 코드를 살펴보고 행 / 열 인수가 -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 참조)이다.parameter
offset
@
@
*
length
parameter
offset
length
offset
답변
변수에서 간단한 하위 문자열 추출입니다. 해당 변수는 스크립트의 첫 번째 매개 변수입니다 ( 1
).
변수 FOO가 있으면 값으로 처음 두 문자를 볼 수 있습니다 ${FOO:0:2}
. 첫 번째 인수를 사용하여 예제에서 동일한 작업을 수행합니다.