LINUX.ORG.RU

bash,echo : любопытно


0

0

Случайно вот наткнулся,
есть кривой кусок кода :

echo `dd if=/dev/urandom bs=512 count=1` | wc -c

такая вот кривизна иногда выдаёт 513 байт - у кого-нить есть догадки, откуда берётся лишний байт ?
Когда меньше 512 ясно - пара пробелов, какая-нить еще последовательность, но как может получиться ЛИШНИЙ байт ??
★★★★★

Ответ на: комментарий от hyde

> wc и перенос строки считает

ну не как два байта ведь.. дело не в wc - он то считает всё как надо, например dd if=/dev/urandom bs=512 count=1 | wc -c совершенно чётко всегда выдаёт 512 байт

в приведённом в subj скрипте echo что-то совсем уж неприличное делает с аргументом, вопрос в том, что именно

MKuznetsov ★★★★★
() автор топика
Ответ на: комментарий от kosmonavt

2 kosmonavt : пожалуй, Вы правы. (echo добавляет в конец '\n')

MKuznetsov ★★★★★
() автор топика
Ответ на: комментарий от MKuznetsov

Ну кроме добавления '\n' в конец, там ещё вывод dd будет обработан шеллом, перед тем, как отдавать его аргументом в echo. То есть два пробела подряд запросто превратятся в один, например.

А зачем тут вообще echo?

Teak ★★★★★
()
Ответ на: комментарий от Teak

тут оно вообще нахрен не нужно, привидённый кусок - просто локализация ошибки из чужого скрипта..

MKuznetsov ★★★★★
() автор топика
Ответ на: комментарий от Teak

krome togo, shell proizvodit pathname expansion v tom chto vernet `command`

dilmah ★★★★★
()

> Случайно вот наткнулся,
> есть кривой кусок кода :
>
> echo `dd if=/dev/urandom bs=512 count=1` | wc -c
>
> такая вот кривизна иногда выдаёт 513 байт - у кого-нить есть догадки,
> откуда берётся лишний байт ?
> Когда меньше 512 ясно - пара пробелов, какая-нить еще
> последовательность, но как может получиться ЛИШНИЙ байт ??

Код действительно паталогически кривой. echo, как тут уже говорили, по умолчанию добавляет '\n' в конце. При этом обратные кавычки `<команда>` удаляют все последние '\n'. Можешь проверить следующей командой:

echo `printf "12345\n\n\n\n\n"` | wc -c

Зачем вообще использовать echo? Запускай свой dd вот так:

dd if=/dev/urandom bs=512 count=1 | wc -c

bbk123 ★★★★★
()
Ответ на: комментарий от bbk123

> Зачем вообще использовать echo? Запускай свой dd вот так:

сказали же -- удовлетворение чистого любопытства:)

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Для удовлетворения любопытства есть документация.

bbk123 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.