#
私はbashが初めてで、またはで始まるすべての行を無視する必要があることを示すファイルからリストをロードしたいだけです;
(空の行も)。
予想どおり、有効な各行はリスト内の文字列になるはずです。
このリストの各 (有効な) 要素に対して何らかのアクションを実行する必要があります。
注: のような for ループがありfor host in host1 host2 host3
ます。
#
私はbashが初めてで、またはで始まるすべての行を無視する必要があることを示すファイルからリストをロードしたいだけです;
(空の行も)。
予想どおり、有効な各行はリスト内の文字列になるはずです。
このリストの各 (有効な) 要素に対して何らかのアクションを実行する必要があります。
注: のような 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[@]}
その他の回答を使用する方が安全です。