在此循环中,如何正确地将 $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:
答案2
让read
命令和 shellIFS
变量一起为您解析该行:
while IFS=: read -r login restOfLine; do
doSomethingWith $login
done < /etc/passwd
为了回答你的问题,bash here-string 会很有用:
login=$(cut -d: -f1 <<< "$line")
答案3
使用回声:
login=$(echo "$line" | cut -d : -f 1)