How do I pass the $line to the cut command properly in this loop?
while read line
do
login= $(cut -d : -f 1)
done < /etc/passwd
I can't do $(cut -d : -f 1 $line)
so what is the correct way?
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.
Sign up to join this communityYou don't actually need the while loop if your intention is only to list the names. Also there is a syntax error after login=
, there should be no space.
cut -d: -f1 /etc/passwd | \
while read login;
do
echo username: $login;
done
or as you tried:
while read line; do
login=$(echo $line | cut -d : -f 1)
echo $login
done < /etc/passwd
even better:
db-getent passwd |cut -d: -f1 | xargs -L1 echo name:
getent
. In your first example, line continuations are not required after a pipe.
Mar 11, 2013 at 1:14
Let the read
command together with the shell IFS
variable parse the line for you:
while IFS=: read -r login restOfLine; do
doSomethingWith $login
done < /etc/passwd
To answer your question, the bash here-string would be useful:
login=$(cut -d: -f1 <<< "$line")