我有一个for循环,它接受一个包含文件名非法字符的CIDR(" /")。
命令的一部分是使用CIDR的名称保存输出。
for i in $(more subnets.lst);do shodan download $i-shodan net:$i;done
下载参数后跟more命令的结果,即CIDR(192.168.21.0/24)。
在bash中有一种方法可以在循环运行时重命名变量吗? 我记得这几年在批处理文件中通过减去str长度来做,但这不会帮助我,因为我只需要替换" /"使用" - "(或任何其他符合标准的字符。
答案 0 :(得分:7)
您可以使用bash
参数扩展:
$ echo $var
192.168.21.0/24
$ echo "${var//\//-}"
192.168.21.0-24
因此,在您的命令中,只需在需要时使用"${i//\//-}"
,而无需更改$i
的原始值。如果要将变量i
设置为新值:
i="${i//\//-}"
在旁注中,使用while
循环来读取文件中的行,而不是cat
,more
或兄弟,例如:
while IFS= read -r line; do ....; done
答案 1 :(得分:1)
我为自己解决了这个问题:
0.5^99