, 당신은
즉, 귀하의 의견을 변환하는 입력 및 매개 변수 확장 기능을 검증하기 위해 내부
case
문을 사용할 수 있습니다 대신 입력을 구문 분석하기 위해 외부 프로그램을 호출보다
# set a copy/paste value for $1
set -- 50-10
case "$1" in
*-*)
range="$1"
min="${range%-*}"
max="${range#*-}"
;;
*)
singleNum="$1"
;;
esac
echo min=$min ... max=$max
출력
비 쌍 515,
min=50 ... max=100
시도
unset min max
set -- other values
case ...
echo min= ... max= ... singleNum=$singleNum
출력
min= ... max= ... singleNum=other
바라기 경우 처리는 자명하지만, 파라미터의 확장은 약간의 설명을 필요로 할 수있다.
문
min=${range%-*}
가 확장 된 값의 오른쪽에서 제거 말한다 (50 ~ 100) 아무것도 문자열이 끝날 때까지 마지막 -
에서 시작. 값 50
이 남아 있습니다.
반대의 제 -
문자로 확대 어떤 값까지 좌측에서 제거 달래
max=${range#*-}
으로 일어난다. 이로 인해 100
이 남습니다.
이 문자열에 하나의 -
문자가, 당신이 -
의 마지막 일치 될 때까지 왼쪽에서 모두 제거 말한다 ${var##*-}
의 다른 버전에 대해 걱정할 필요가 없습니다, 그리고 역 ${var%%-*}
제거 모두 오른쪽에서부터 (뒤로) 처음까지 -
char까지.
이 임시 변수없이 할 수 있다는 것을 우리에게 상기시켜 것 광신적 인 미니멀
, 즉
min=${1%-*} ; max=${1#*-}
그리고 한 줄의 환타지는
case "$1" in *-*) range="$1";min="${range%-*}";max="${range#*-}";;*) singleNum="$1";;esac; echo min=$min ... max=$max .,, singleNum=$singleNum
만족 될 수 있습니다 -)
linux
'IFS = '-''로 나눌 수도 있습니다. 그런 다음 쉘의 내장'$ # '을 사용하여 토큰 수를 찾을 수 있습니다. – tripleee
@ tripleee : 좋은 생각. O.P.로부터 답장을받지 못 했으므로 도움이되지 않는 답을 위해 더 많은 시간을 낭비한다면 안됩니다. – shellter