我有一个包含IP地址的bash变量(没有CIDR或其他任何东西,只有四个八位位组)。

我需要将该变量分成四个单独的八位字节,如下所示:

$ip = 1.2.3.4;
$ip1 = 1
$ip2 = 2
# etc

这样我就可以避开sed的时期。有一个更好的方法吗? awk是我在寻找什么?

最佳答案

如果您想将每个八位位组分配给自己的变量而不使用数组或带有换行符的单个变量(这样就可以轻松地通过for循环运行它),则可以使用#%修饰符对${x}进行如下操作:

[ 20:08 jon@MacBookPro ~ ]$ x=192.160.1.1 && echo $x
192.160.1.1
[ 20:08 jon@MacBookPro ~ ]$ oc1=${x%%.*} && echo $o1
192
[ 20:08 jon@MacBookPro ~ ]$ x=${x#*.*} && echo $x
160.1.1
[ 20:08 jon@MacBookPro ~ ]$ oc2={x%%.*} && echo $o2
160
[ 20:08 jon@MacBookPro ~ ]$ x=${x#*.*} && echo $x
1.1
[ 20:08 jon@MacBookPro ~ ]$ oc3=${x%%.*} && echo $o3
1
[ 20:08 jon@MacBookPro ~ ]$ x=${x#*.*} && echo $x
1
[ 20:08 jon@MacBookPro ~ ]$ oc4=${x%%.*} && echo $oc4
1

[ 20:09 jon@MacBookPro ~ ]$ echo "$oc1\.$oc2\.$oc3\.$oc4"
192\.160\.1\.1

看到这个/wiki/Bash:_Append_to_array_using_while-loop
以及更多的this article

10-08 17:02