4

когда я пишу команду

$ echo date  

затем он печатает "дату" как есть, то есть не запускает программу даты.
Но когда я пишу

$ echo date | wc  

тогда правильный ответ выдается, как если бы дата была запущена. Как трубопровод имеет значение здесь?
Пожалуйста, объясни.

5 ответов5

3
$ echo date | wc
      1       1       5

как счетчик байтов == 5 (= sizeof ("date")) кажется, что дата не была выполнена

но

$ echo date | xargs time

запускает дату как команду

2

Это не так.

Пытаться:

echo date | cat > here.out

тогда попробуйте:

echo `date` | cat > here.out
0

Проблема в том, что 'echo' отправляет следующий текст в стандартный вывод. Текст, в данном случае, «дата», поэтому то, что вы показываете, не будет работать. Это будет: echo | date, потому что date теперь создает текст для echo.

0

echo `date` - это то, что вы хотите.

0

Это связано с тем, как bash использует строки.

Если вы посмотрите на то, что хранится в этих переменных

d1=date
d2="date"
d3='date'
d4=`date`

Вы заметите, что d1, d2 и d3 - это просто строки, содержащие "дату", однако d4 имеет результат даты выполненной команды.

Если мы затем сделаем этот шаг дальше и посмотрим, сможем ли мы найти разницу между этими строками.

d4=`date +%Y%m%d`
echo $d4

Это будет означать, что теперь у нас есть "20100418" в $ d4

d3='$d4'
echo $d3

Теперь в $ d3 мы напечатали строку «$ d4», точные 3 символа ...

d2="$d4"
echo $d2

Теперь у нас есть "20100418", хранящийся в $ d2, так как мы напечатали $ d4 и сохранили этот вывод в переменной $ d2.

d1=$d4
echo $d1

И тогда у вас есть копия содержимого переменной $ d4 в переменную $ d1.

Надеюсь, это немного прояснит, как работают эти строки.

А теперь вернемся к вашему вопросу.

cj@zap:~$ echo date | wc
      1       1       5
cj@zap:~$ echo `date` | wc
      1       6      31
cj@zap:~$ date | wc
      1       6      31

Теперь, что это на самом деле означает? Человек wc дает нам это:

NAME wc - выводит количество строк, слов и байтов для каждого файла

Итак, "1 1 5" только что сказал нам, что у нас есть 1 символ новой строки, 1 слово и 5 символов, и это соответствует дате \n.

И "1 6 31" будет соответствовать «sön 18 apr 2010 10.07.25 CEST\n», так как именно это дала мне моя команда даты ...

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