Как предотвратить разбиение строк grep в скрипте ksh?

#unix #scripting #grep #ksh

#unix #создание сценариев #grep #ksh

Вопрос:

Я пытаюсь изменить скрипт ksh, чтобы распечатать строку, содержащую фразу «/var/corefiles» . Я довольно новичок в написании сценариев, так что это сбивает меня с толку. Например, если у меня есть следующая строка в файле

 /dev/x /dev/x2 /var/corefiles yes
  

И я использую это для цикла:

 for $host in $(grep "var/corefiles" $VFSTAB_LOC); do
         echo $i
done
  

Он выводит:

  /dev/x
 /dev/x2
 /var/corefiles
 yes
  

Я немного смущен тем, почему он выводит только один фрагмент за раз. Если у кого-нибудь есть какие-либо объяснения / модификации, они были бы весьма признательны!

Ответ №1:

Простое выполнение grep "var/corefiles" $VFSTAB_LOC (без for или echo ) сделает именно то, что, по вашим словам, вы хотите сделать.

Комментарии:

1. У меня такое ощущение, что ‘echo’ — это просто уменьшенная демонстрация того, что он действительно делает в цикле 🙂

2. Я «страдаю» от GIGO, даже не пытаясь. Я пытаюсь применить обычный искусственный (?) интеллект, хотя

3. Чувак, я тупой. Спасибо! В любом случае, echo был заполнителем для всего остального происходящего 🙂

Ответ №2:

 grep "var/corefiles" $VFSTAB_LOC | while read line; do
         echo "$line"
done
  

или в недавних версиях

 readarray mylines < grep "var/corefiles" $VFSTAB_LOC

for line in "${mylines[@]}"; do
    echo "$line"
done
  

Комментарии:

1. Полагаю, теперь я это делаю 🙂 Первый вариант действительно работает с оболочкой Korn, IIRC