bashでは、whileコマンドをcutコマンドに入力するにはどうすればよいですか?


2

このループで$ lineをcutコマンドに適切に渡すにはどうすればよいですか?

while read line
do
    login= $(cut -d : -f 1)

done < /etc/passwd

私はそう$(cut -d : -f 1 $line)することができません正しい方法は何ですか?

回答:


1

名前をリストするだけの場合は、whileループは実際には必要ありません。またlogin=、の後に構文エラーがあります。スペースはありません。

cut -d: -f1 /etc/passwd | \
while read login; 
do 
    echo username: $login;
done

またはあなたが試したように:

while read line; do
   login=$(echo $line | cut -d : -f 1)
   echo $login
done < /etc/passwd

さらに良い:

db-getent passwd |cut -d: -f1 | xargs -L1 echo name:

1
+1 getent。最初の例では、パイプの後の行継続は必要ありません。
グレンジャックマン

パーフェクト!Ярославのおかげで、ループは大きなwhileループからのコードのスニペットだったので、2番目の提案は私にとって完璧です。
マイク

3

readコマンドをシェルIFS変数と一緒に行を解析してみましょう:

while IFS=: read -r login restOfLine; do
    doSomethingWith $login
done < /etc/passwd

あなたの質問に答えるには、bash here-stringが役立ちます:

login=$(cut -d: -f1 <<< "$line")

ここの文字列はすてきできれいです。乾杯。
マイク

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.