在 bash 中,如何将 while 循环输入传递给 cut 命令?

在 bash 中,如何将 while 循环输入传递给 cut 命令?

在此循环中,如何正确地将 $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)

相关内容