1

#私はbashが初めてで、またはで始まるすべての行を無視する必要があることを示すファイルからリストをロードしたいだけです;(空の行も)。

予想どおり、有効な各行はリスト内の文字列になるはずです。

このリストの各 (有効な) 要素に対して何らかのアクションを実行する必要があります。

注: のような 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 に答える