Разница между wc -c и ${#}?

Если ls -lпоказывает вопросительный знак(?)в качестве первого символа в строке, это означает, что тип файла не является нормальным, распознаваемым системой. Файл не обычный файл, не каталог, не символическая ссылка и т.д.

Это может произойти при монтировании не -собственной файловой системы (, например, файловой системы Solaris с дверями ). В этом случае вы можете или не можете взаимодействовать с файлом, открыв его.

Чаще всего это происходит при повреждении файловой системы. В этом случае размонтируйте файловую систему и запустите fsck. Возможно, вы потеряли некоторые данные.

Для lsнет возможности отображать числовое значение, которое кодирует тип файла. Если вы хотите показать числовой тип файла, вы можете использовать такие команды, как

strace -e lstat ls -ld the_file
strace -e lstat stat the_file
perl -e 'printf "0%o\n", (stat($ARGV[0]))[2]' the_file

Знание этого числового значения обычно мало полезно.

4
16.03.2021, 15:16
2 ответа

Дополнительный символ — это новая строка. Вы можете увидеть это, если сделаете, например:

echo $var | hd | tail
3
18.03.2021, 22:25

Как вы можете видеть в этом примере, используя команду od, показывающую байты, она печатает новую строку:

$ echo foo | od -c -b
0000000   f   o   o  \n
        146 157 157 012
0000004

Таким образом, в этом случае wc -c, а также wc -mсчитают новую строку.

Без новой строки:

$ echo -n foo | od -c -b
0000000   f   o   o
        146 157 157
0000003

Поэтому, если вы используете echo, добавьте параметр -n, чтобы он не печатал новую строку, илиprintf:

$ printf "%s" foo | od -c -b
0000000   f   o   o
        146 157 157
0000003

5
18.03.2021, 22:25

Теги

Похожие вопросы