ksh에서 쉼표로 구분된 숫자를 구문 분석합니다.

ksh에서 쉼표로 구분된 숫자를 구문 분석합니다.

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만 표시됩니다 . 문자열로 해석되는 경우 이 변수 는 비어 있습니다.%dprintfm

관련 정보