1

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

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

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

注意:我有一个 for 循环,例如for host in host1 host2 host3.

4

3 回答 3

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
于 2012-04-18T15:02:56.427 回答
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
于 2012-04-18T15:09:26.643 回答
0

如果您不担心输入中的空格,您可以简单地使用

for host in $( grep '^[^#;]' hosts.txt ); do
    # Do something with $host
done

${array[@]}通常使用数组和其他答案更安全。

于 2012-04-18T15:37:44.817 回答