ksh에 쉼표로 구분된 숫자를 2개 이상 포함할 수 없는 변수가 있습니다(공백은 허용됨). 그것은 다음과 같습니다:
a="1,2"
a="1 ,2"
a="1,"
a="0,0"
나는 루프를 원한다
- 끝까지 읽어라
$a
- 2개 이상 있으면 종료
,
- 유통
m=a[1]
및n=a[2]
답변1
for a in "1,2" "1 ,2" "1," "0,0" "0,0,0" "2,3"; do
case "$a" in
*,*,*) printf 'Too many commas: "%s"\n' "$a" >&2
exit 1
esac
IFS=', ' read m n <<<"$a"
printf 'm = %d, n = %d\n' "$m" "$n"
done
이것은 생산할 것입니다
m = 1, n = 2
m = 1, n = 2
m = 1, n = 0
m = 0, n = 0
Too many commas: "0,0,0"
ksh93
(또는 bash
또는) 아래에서 실행되는 경우 zsh
.
앞에 IFS
공백과 쉼표를 설정하면 read
두 문자(또는 문자) 의 내용이 구분됩니다 read
. $a
나머지 데이터는 m
및 에 할당됩니다 n
.
문자열이 와 유사하면 "2,3 4"
해당 n
값이 할당됩니다 3 4
.
또한 출력의 세 번째 줄(parsing "1,"
) 에는 형식 지정자를 사용하고 m
있기 때문에 0만 표시됩니다 . 문자열로 해석되는 경우 이 변수 는 비어 있습니다.%d
printf
m