解析 ksh 中逗号分隔的数字

解析 ksh 中逗号分隔的数字

我在 ksh 中有一个变量,它不能包含超过 2 个逗号分隔的数字(允许空格)。就像是:

a="1,2"
a="1 ,2" 
a="1,"
a="0,0"

我想要一个循环

  • 通读$a
  • 如果有多个则退出,
  • 分配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剩余数据分配给mn

如果字符串类似于"2,3 4"n则将被分配该值3 4

另请注意,在输出的第三行(解析"1,")中,m仅显示为零,因为我们将%d格式说明符与 一起使用printf。如果解释为字符串,则该变量m为空。

相关内容