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
2文字(または文字)の内容が区別されますread
。$a
残りのデータはm
およびに割り当てられますn
。
文字列がに似ている場合は、"2,3 4"
そのn
値が割り当てられます3 4
。
また、出力の3行目"1,"
にはフォーマット指定子を使用しているm
ため、0のみが表示されます。文字列として解釈されると、この変数は空です。%d
printf
m