如何在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
中。