我是bash的新手,我只是想从文件中加载一个列表,提到所有以#
或;
开头的行都应该被忽略(也是空的)。
正如预期的那样,每个有效行应该成为列表中的字符串。
我需要对此列表的每个(有效)元素执行一些操作。
注意:我有一个类似for host in host1 host2 host3
的for循环。
答案 0 :(得分:5)
您可以使用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
答案 1 :(得分:1)
$ 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
答案 2 :(得分:0)
如果您不担心输入中的空格,可以直接使用
for host in $( grep '^[^#;]' hosts.txt ); do
# Do something with $host
done
但在其他答案中使用数组和${array[@]}
一般更安全。