Whileループを使用して読み取る正しい方法は何ですか

Whileループを使用して読み取る正しい方法は何ですか

私はwhileループと組み合わせたreadステートメントを使用してファイルの各行を読み、最初の2つの単語を2つの変数としてキャプチャできることを示すためにbash本の一部を読みました。しかし、私はそれをテストするために私自身のスクリプトを書いた。

$ cat hoststest 
192.168.1.1 pc1 word3 word4
192.168.1.2 pc2 word3 word4
$ cat t13
#!/bin/bash
while read ip_address pc_number restofstuff
do
if [ ! -z "$ip_address" ]; then
    echo "IP is $ip_address and its for $pc_number"
fi
done < "/home/john/hoststest"
$ ./t13
IP is 192.168.1.1 and its for pc1
IP is 192.168.1.2 and its for pc2

初期テストでは、3番目の変数「restofstuff」はありませんでした。 pc1 または pc2 を値として取得する代わりに、pc_number 変数は pc_number を行の残りの部分として保存します。そのため、残りの行をすべてpc_numberの一部として含めないように、3番目の変数を追加しました。今私がしたことは、この「restofstuff」変数を使ってうまくいきますが、私が正しくやっているようではありません。私は基本的に何もしない「死んだ」変数を作成しました。 Read + whileループを引き続き使用しようとすると、正しいアプローチは何ですか?

ベストアンサー1

それだけです。read有効:入力に変数よりも多くのフィールドがある場合、最後の変数はそのフィールドと残りのすべてのフィールドに割り当てられます。一般的なアプローチは、この変数に名前を付けることです_

while read ip_address pc_number _

バラより「IFS=read-r-line」を理解する深い議論をしてreadシェルループを使用してテキストを処理するのはなぜ悪い習慣と見なされますか?

おすすめ記事