Подобно тому, как $*
вставляет символ в конкатенацию аргументов, расширение без кавычек удаляет символы из строки, и каждое удаление разбивает строку на отдельные аргументы.
$ var=1234567890
$ IFS=368
$ echo "$var" $var
1234567890 12 45 7 90
$ printf '<%s> ' "$var" $var
<1234567890> <12> <45> <7> <90>
Обновление для исправленного вопроса...
#!/bin/bash
label="$1" #the label to be added to the footer
from=$2 #the starting number
#for each pdf in this directory
for input in *.pdf; do
#compose an output file name
output=${input%.*}.numbered.pdf
#count the pages
pagenum=$(pdftk "$input" dump_data | grep "NumberOfPages" | cut -d":" -f2)
#calculate the last page no
to=$(($from+$pagenum-1))
(echo -e ".nr FM 0.125i\n.ds CH"; for s in $(seq -f "%05g" $from $to); do
echo -e ".ds RF $label $s \n.bp +1"; done) |
groff -ms -Tpdf |
pdftk "$input" multistamp - output "$output"
#get ready for the next file
from=$((to +1))
done
Составьте базовый groff -ms
документ с пустыми страницами, за исключением правого нижнего колонтитула .ds RF
, содержащего нужный текст $label $s
, где $s
— номер страницы, который я дополнил нулями вseq -f "%05g"
groff -ms
применяет верхний колонтитул страницы, который подавляется с помощью .ds CH
, а .nr FM 0.125
уменьшает высоту поля нижнего колонтитула, поэтому каждая «страница» представляет собой просто нижний колонтитул с разрывом страницы.bp +1
Передача этого текста в groff -Tpdf
создает PDF-файл, который затем передается в pdftk
через стандартный ввод -
, multistamped
во входной файл и, наконец, записывается в выходной файл.
Мои извинения всем, кто действительно знает, как правильно использовать groff
, если это хак... Я даже не смотрел на него до сегодняшнего дня.