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. 첫 번째 예에서는 파이프 다음에 줄 연속이 필요하지 않습니다.
glenn jackman

완전한! 감사합니다 Ярослав, 루프는 큰 while 루프의 코드 스 니펫 이었으므로 두 번째 제안은 저에게 완벽합니다.
Mike

3

하자 read 쉘과 함께 명령 IFS 가변 당신을위한 선을 분석하십시오 :

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

귀하의 질문에 대답하기 위해 bash here-string이 유용 할 것입니다 :

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

여기의 끈은 멋지고 깔끔하다. 나는 그것을 좋아한다! 건배.
Mike

2

용도 에코 :

login=$(echo "$line" | cut -d : -f 1)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.