回答:
名前をリストするだけの場合は、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:
read
コマンドをシェルIFS
変数と一緒に行を解析してみましょう:
while IFS=: read -r login restOfLine; do
doSomethingWith $login
done < /etc/passwd
あなたの質問に答えるには、bash here-stringが役立ちます:
login=$(cut -d: -f1 <<< "$line")
getent
。最初の例では、パイプの後の行継続は必要ありません。