如何在bash中从文件中加载列表?

时间:2012-04-18 14:50:56

标签: bash

我是bash的新手,我只是想从文件中加载一个列表,提到所有以#;开头的行都应该被忽略(也是空的)。

正如预期的那样,每个有效行应该成为列表中的字符串。

我需要对此列表的每个(有效)元素执行一些操作。

注意:我有一个类似for host in host1 host2 host3的for循环。

3 个答案:

答案 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[@]}一般更安全。