如何在bash中基于分隔符拆分字符串?
我将字符串存储在变量中,如下所示:

DATA="111111-777777-Hello"

现在,我想在-分隔符上拆分上面的字符串,并将两个数字存储在两个不同的变量中。
NUMBER1="111111"
NUMBER2="777777"

如果编号1和编号2是空字符串,而不是数字,则用非零状态代码退出脚本。

最佳答案

IFS=- read -r number1 number2 _ <<<"$DATA"
[[ $number1 && $number2 ]] || { echo "Initial columns not read" >&2; exit 1; }
[[ $number1$number2 = *[![:digit:]]* ]] && { echo "Values are not numeric" >&2; exit 1; }

echo "Number 1 is $number1"
echo "Number 2 is $number2"

IFS设置为与read命令位于同一行的分隔符(中间没有分隔符,如;)会将其作用域设置为单个read操作,因此不会修改脚本中其他地方的shell行为。
注意_read的一个额外参数--行的其余部分存储在那里,防止它被附加到number2中。

10-06 05:14