bash截取变量一个小问题

脚本想实现截取ip地址。但是不知道为什么${a:5:18}起始位置就是5,但是总是显示第一个字符
root@yzrt-MS-7D20:/home/yzrt/xzq# a=`sed -n 2p qqqq`
root@yzrt-MS-7D20:/home/yzrt/xzq# echo $a
inet 192.168.79.230 netmask 255.255.255.0 broadcast 192.168.79.255
root@yzrt-MS-7D20:/home/yzrt/xzq# b=${a:5:18}
root@yzrt-MS-7D20:/home/yzrt/xzq# echo $b
inet 192.168.79
root@yzrt-MS-7D20:/home/yzrt/xzq# 


如果还是无法实现,可以使用awk来切割

抱歉无法复现问题,建议再检查一下。

$ a="inet 192.168.79.230 netmask 255.255.255.0 broadcast 192.168.79.255"
$ echo $a
inet 192.168.79.230 netmask 255.255.255.0 broadcast 192.168.79.255
$ b=${a:5:18}
$ echo $b
192.168.79.230 net

难道前面还有一些不可见字符?

我在Ubuntu虚拟机中测试了, 采用的ip addr命令, 读取字符串之后前面会有一个\t, 在echo之后不显示, 但是通过字符串分割会首先读取四个空格, 这就导致了你那边出现了问题, 建议先删除两头的空白字符.