2

Как правильно передать $ line в команду cut в этом цикле?

while read line
do
    login= $(cut -d : -f 1)

done < /etc/passwd

Я не могу сделать $(cut -d : -f 1 $line) так что это правильный путь?

3 ответа3

3

Позвольте команде read вместе с переменной IFS оболочки проанализировать строку для вас:

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

Чтобы ответить на ваш вопрос, полезна строка здесь:

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

Используйте эхо:

login=$(echo "$line" | cut -d : -f 1)
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:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .