Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: почему так? (shell)  (Прочитано 1472 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 7nd

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
почему так? (shell)
« : 08 Сентября 2009, 20:58:35 »
Добрый день, уважаемый форум!

есть вот такой скрипт:

#!/bin/bash

for i in $(ls -w 1 /home ); do \
        ####
        VAR=`<команда> $i |  grep -E "^10\.|192."`;
        if [ -n "$VAR" ] ; then
[b]                echo "$i $VAR " ;     [/b] 
        fi
done



собственно вопрос: почему в выводе выделенной жирным команде содержатся символы переноса строки, если в выводе команды

  echo  `<комманда> $i |  grep -E "^10\.|192\.168\."`;

никаких переносов строк нет.

P.S. вывод <команда> $i представляет собой список ip-адресов по одному в строке
прочитал мануал - спас мир от глупого вопроса

ры

  • Гость
Re: почему так? (shell)
« Ответ #1 : 08 Сентября 2009, 21:58:04 »
по умолчанию echo разбивает на строки
вывод в одну строку — ­echo -n

Оффлайн 7nd

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Re: почему так? (shell)
« Ответ #2 : 09 Сентября 2009, 17:24:58 »
echo -n не переносит строку, но не удаляет символы переноса строки из существующей
прочитал мануал - спас мир от глупого вопроса

Оффлайн RandomNT

  • Любитель
  • *
  • Сообщений: 80
    • Просмотр профиля
Re: почему так? (shell)
« Ответ #3 : 10 Сентября 2009, 21:21:21 »
и-за двойных кавычек

Цитата: Advanced Bash-Scripting Guide
Кавычки, ограничивающие строки с обеих сторон, служат для предотвращения интерпретации специальных символов, которые могут находиться в строке.

VAR=`<команда> $i |  grep -E "^10\.|192."`Вывод команды содержит символы переноса строки, они попадут в переменную VAR

echo "$VAR"VAR заключено в кавычки, строка не будет разобрана и будет выведена как есть

echo $VARВ этом случае строка будет разбита на несколько частей и каждая часть выведена через пробел.
Разбивать оно будет используя переменную $IFS - в ней определены символы-разделители (по умолчанию: пробел, табуляция, перенос строки)

Тоже самое тут
echo  `<комманда> $i |  grep -E "^10\.|192\.168\."`
echo  "`<комманда> $i |  grep -E "^10\.|192\.168\."`"

Оффлайн 7nd

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Re: почему так? (shell)
« Ответ #4 : 12 Сентября 2009, 18:50:57 »
спасибо за развёрнутый ответ :)

[закрыто]
прочитал мануал - спас мир от глупого вопроса

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.