Вопрос: В bash, как мне передать входные данные while в команду cut?


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

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

done < /etc/passwd

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


2
2018-03-10 22:41


Источник




Ответы:


Фактически вам не нужен цикл 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
2018-03-10 23:16



+1 для getent, В вашем первом примере продолжение строк не требуется после трубы. - glenn jackman
Я не понял, спасибо! - Ярослав Рахматуллин
Отлично! Благодаря Ярослав, цикл был фрагментом кода из более крупного цикла, поэтому ваше второе предложение идеально подходит для меня. - Mike


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

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

Чтобы ответить на ваш вопрос, bash here-string будет полезен:

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

3
2018-03-11 01:17



Здесь-строка хороша и аккуратная Мне это нравится! Приветствия. - Mike


использование эхо:

login=$(echo "$line" | cut -d : -f 1)

2
2018-03-10 22:55