Bash for循环 - 更改变量名称

use*_*450 1 linux bash for-loop

我有一个for循环,它接受一个包含文件名("/")非法字符的CIDR.

命令的一部分是使用CIDR的名称保存输出.

for i in $(more subnets.lst);do shodan download $i-shodan net:$i;done
Run Code Online (Sandbox Code Playgroud)

download参数后跟more命令的结果,即CIDR(192.168.21.0/24).

在循环运行时,bash中有一种重命名变量的方法吗?我记得这几年在批处理文件中通过减去str长度来做,但这对我没有帮助,因为我只需要用" - "(或任何其他兼容的char)替换"/".

hee*_*ayl 7

您可以使用bash参数扩展来执行此操作:

$ echo $var
192.168.21.0/24

$ echo "${var//\//-}"
192.168.21.0-24
Run Code Online (Sandbox Code Playgroud)

因此,在您的命令中,只需"${i//\//-}"在需要时使用而不更改原始值$i.如果要将变量设置i为新值:

i="${i//\//-}"
Run Code Online (Sandbox Code Playgroud)

在一个侧面说明,使用while循环来从文件中读取行,而不是cat,more或兄弟,如:

while IFS= read -r line; do ....; done
Run Code Online (Sandbox Code Playgroud)