почему эхо -n "100" | ш c - c выход 3? - PullRequest
0 голосов
/ 21 января 2020

Мне просто довелось поиграть с несколькими linux командами, и я обнаружил, что echo -n "100" | wc -c выводит 3. я знал, что 100 может храниться в одном байте как 1100100, поэтому я не мог понять, почему это произошло. Я предполагаю, что это из-за некоторой кодировки, не так ли? я также узнал, что если я touch test.txt и echo -n "100" | test.txt и затем выполню wc ./test.txt -c, я получаю тот же вывод, и я предполагаю, что виновата кодировка файла, я прав?

Ответы [ 3 ]

1 голос
/ 21 января 2020

100 имеет длину три символа, следовательно, w c дает вам 3. Если вы пропустите -n для эха, он покажет 4, потому что в этом случае эхо также будет выводить новую строку.

0 голосов
/ 21 января 2020

Когда вы echo -n 100, вы показываете строку с 3 символами.
Когда вы хотите показать символ со значением ascii 100, используйте

echo -n "d"
# Check
echo -n "d" | xdd -b

Я нашел значение "d" с man ascii. Если вы не хотите использовать справочную страницу, используйте

printf "\\$(printf "%o" 100)"
# Check
printf "\\$(printf "%o" 100)" | xxd -b
# wc returns 1 here
printf "\\$(printf "%o" 100)" | wc -c
0 голосов
/ 21 января 2020

Все нормально)

$ wc --help
...
  -c, --bytes            print the byte counts
  -m, --chars            print the character counts
...

$ man echo
...
-n     do not output the trailing newline
...

$ echo -n 'abc' | wc -c
3

$ echo -n 'абс' | wc -c # russian symbols
6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...