bash - 在将 shell 变量传递给另一个命令之前删除前导零

标签 bash strip

事实证明,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/

相关文章:

python - argparse(和已弃用的 optparse)如何在 bash 中响应 python 程序名称后的 'tab' 按键?

bash - 在 Jenkins 的 Bash 脚本中使用环境变量

linux - 如何检查输入是否为空格和空值?

linux - 'strip --strip-all' 有效,但 'strip --strip-symbol=symbolname' 无效,因为它是在重定位中命名的

ruby-on-rails - 从 Ruby 变量中去除空格的万无一失的方法?

python - 如何仅读取和删除特定行的代码?

bash - 如何从 Bash 中的字符串中删除或替换模式的所有匹配项?

linux - 处理 bash 脚本中调用的 python 文件的输出

javascript - Bash 脚本在 CodeKit Hook 中不起作用

python - 如何在 Python 字符串中去掉逗号