我是 bash 的新手,我只想从一个文件中加载一个列表,其中提到所有以#
or开头的行都;
应该被忽略(以及空行)。
正如预期的那样,每个有效行都应该成为列表中的一个字符串。
我需要对此列表的每个(有效)元素执行一些操作。
注意:我有一个 for 循环,例如for host in host1 host2 host3
.
我是 bash 的新手,我只想从一个文件中加载一个列表,其中提到所有以#
or开头的行都;
应该被忽略(以及空行)。
正如预期的那样,每个有效行都应该成为列表中的一个字符串。
我需要对此列表的每个(有效)元素执行一些操作。
注意:我有一个 for 循环,例如for host in host1 host2 host3
.
您可以使用 bash 内置命令mapfile
将文件读取到数组:
# read file(hosts.txt) to array(hosts)
mapfile -t hosts < <(grep '^[^#;]' hosts.txt)
# loop through array(hosts)
for host in "${hosts[@]}"
do
echo "$host"
done
$ cat file.txt
this is line 1
this is line 2
this is line 3
#this is a comment
#!/bin/bash
while read line
do
if ! [[ "$line" =~ ^# ]]
then
if [ -n "$line" ]
then
a=( "${a[@]}" "$line" )
fi
fi
done < file.txt
for i in "${a[@]}"
do
echo $i
done
输出:
this is line 1
this is line 2
this is line 3
如果您不担心输入中的空格,您可以简单地使用
for host in $( grep '^[^#;]' hosts.txt ); do
# Do something with $host
done
但${array[@]}
通常使用数组和其他答案更安全。