Почему дата +3 равняется 3?

С типичной установкой BusyBox я думаю, что Вы оказываетесь перед необходимостью анализировать вывод ls получить размер. После того как Вы имеете размер, извлекаете первые n-2 байты файла с head.

size=$(ls -Lnd -- "$file" | awk 'NR==1 {print $5}')
head -c "$(($size - 2))" <"$file" >"$file.new"

Если Вы хотите усечь файл на месте, использовать dd.

size=$(ls -Lnd -- "$file" | awk 'NR==1 {print $5}')
dd if=/dev/null of="$file" bs="$(($size - 2))" seek=1
0
23.01.2014, 10:56
1 ответ

Поскольку плюс глиф спецификатор формата.

В целом, в программах UNIX, спорами с минус глиф являются опции для программы, и спорами с плюс глиф являются команды для программы (см. man less).

Страница руководства man date шоу больше информации об этой теме.

4
28.01.2020, 02:21
  • 1
    +1, Но: обобщение (опции по сравнению с командами) не применяется здесь с тех пор date никогда не является интерактивным. Также + не спецификатор формата, он указывает на запуск строки параметров (эта строка затем содержит спецификаторы формата, но + не один из них), уместность + обозначается в резюме страницы справочника, date [OPTION]... [+FORMAT], Причем "ФОРМАТ" является строкой формата. Конечно, это все еще не объясняет почему date +3 выкладывает 3... это должна быть ошибка. –  goldilocks 23.01.2014, 11:14
  • 2
    Почему нет? Мне нравится date +3%s3%Z3. –  41754 23.01.2014, 11:26
  • 3
    Хм, положительную сторону. date +"**"%s"**"%Z работы также. Отчасти не-или очень двусмысленно зарегистрированный, если Вы не читаете info coreutils материал tho. –  goldilocks 23.01.2014, 12:22

Теги

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