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スペースとカンマを設定すると、read2文字(または文字)の内容が区別されますread$a残りのデータはmおよびに割り当てられますn

文字列がに似ている場合は、"2,3 4"そのn値が割り当てられます3 4

また、出力の3行目"1,"にはフォーマット指定子を使用しているmため、0のみが表示されます。文字列として解釈されると、この変数は空です。%dprintfm

関連情報