事实证明,iptables不能很好地处理前导零。由于使用的$machinenumber的其他目的必须带有前导零,因此,该想法只是基于$nozero创建一个新变量($machinenumber),在其中删除了前导零。
$machinenumber是介于01和24之间的两位数字。当前为09
$machinetype现在是74,以前没有引起任何问题。

到目前为止,我有:

nozero = (echo $machinenumber | sed 's/^0*//')
iptables -t nat -I POSTROUTING -s 10.($machinetype).($nozero).0/24 -j MASQUERADE

虽然我相信自己的工作方向正确,但代码的结果是:
ERROR - Unknown string operation

最佳答案

您不需要使用sed或其他外部实用程序。 Bash有几种方法可以为您去除前导零。

iptables -t nat -I POSTROUTING -s "10.$machinetype.$((10#$machinenumber)).0/24" -j MASQUERADE
$(())设置算术上下文,并且10#将数字从10转换为10,从而导致任何前导零被丢弃。
shopt -s extglob
iptables -t nat -I POSTROUTING -s "10.$machinetype.${machinenumber##+(0)}.0/24" -j MASQUERADE

打开extglob时,显示的参数扩展将删除所有前导零。不幸的是,如果原始值为0,则结果为空字符串。

关于bash - 在将shell变量传递给另一个命令之前,删除前导零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11123717/

10-11 21:08