Это связано с тем, как 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», так как именно это дала мне моя команда даты ...