我无法发表评论,因为我没有足够的声誉,但我建议你接受丹尼斯的回答(这真的很整洁)
首先,我认为您的答案不是有效的 bash。在我的安装中,我得到:
> machinetype=74
> machinenumber=05
> iptables -t nat -I POSTROUTING -s 10.($machinetype).($machinenumber + 0).0/24 -j MASQUERADE
-bash: syntax error near unexpected token `('
> echo 10.($machinetype).($machinenumber + 0).0/24
-bash: syntax error near unexpected token `('
如果我引用它,我会得到:
> echo "($machinetype).($machinenumber + 0)"
(74).(05 + 0)
我假设你的意思是:
> echo 10.$(($machinetype)).$(($machinenumber + 0)).0/24
10.74.5.0/24
但是,由于八进制,它当然仍然是一个糟糕的解决方案:
> machinenumber=09
> echo 10.$(($machinetype)).$(($machinenumber + 0)).0/24
-bash: 09: value too great for base (error token is "09")
我假设您的号码目前不是 08 或 09。
这是丹尼斯的:
> echo $((10#09))
9
> echo $((10#00))
0
> echo $((10#00005))
5
> echo $((10#))
0
诚然,最后一个可能是某人的输入验证问题。
sed解决方案存在的问题:
> echo "0" | sed 's/^0*//'
>