Bash 缩写字符串的包装器
Bash wrapper that abbreviates strings
我有一个 python program 可以自定义 pdf 文件的页码。
它的用法是这样的:
usage: pagelabels [-h] [--outfile out.pdf] [--delete | --update]
[--startpage STARTPAGE]
[--type {arabic,roman lowercase,roman uppercase,letters lowercase,letters uppercase}]
[--prefix PREFIX] [--firstpagenum FIRSTPAGENUM]
[--load other.pdf]
file.pdf
Add page labels to a PDF file
我写了一个包装器 shell 脚本来节省在上面调用 pagelabels
时的输入。
#!/bin/bash
# Wrapper for `addpagelabels.py`.
display_usage() {
echo "Wrapper for addpagelabels.py"
echo -e "\nUsage: <inputpdf> <startpage> <type> <firstpagenum>\n"
echo -e "<type>:\n a=arabic;\n r=roman lowercase;\n R=roman uppercase;\n l=letters lowercase;\n L=letters uppercase.\n"
echo "Output file would be filename_toc.pdf"
}
if [ $# -eq 0 ]; then
display_usage
exit 1
else
a='arabic'
r='roman lowercase'
R='roman uppercase'
l='letters lowercase'
L='letters uppercase'
python3 -m pagelabels --startpage --type --firstpagenum --outfile ${1%%.*}_toc.pdf
exit 0
fi
脚本中定义的字符串变量不能被下面的第三个参数a
调用。
$ bash pdfpgn.sh dtjl.pdf 2 a 297
usage: addpagelabels.py [-h] [--delete] [--startpage STARTPAGE]
[--type {arabic,roman lowercase,roman uppercase,letters lowercase,letters uppercase}]
[--prefix PREFIX] [--firstpagenum FIRSTPAGENUM]
[--outfile out.pdf]
file.pdf
addpagelabels.py: error: argument --type/-t: invalid choice: 'a' (choose from 'arabic', 'roman lowercase', 'roman uppercase', 'letters lowercase', 'letters uppercase')
正确的做法是什么?
按照@Charles Duffy 的建议,我修改了我的 display_usage
函数如下:
display_usage() {
echo "Wrapper for pagelabels.py (python3 -m pagelabels). "
printf '%s\n' "Usage: pdfpgn.sh <inputpdf> <startpage> <type> <firstpagenum> <prefix>"
echo
printf '%s\n' "<type>:" " a=arabic" " r=roman lowercase" " R=roman uppercase" " l=letters lowercase" " L=letters uppercase"
echo
echo "Output file would be filename_pgn.pdf"
}
考虑一个关联数组(bash 相当于 Python 字典,尽管它的键和值只能是字符串)。
考虑:
#!/bin/bash
case $BASH_VERSION in ''|[123].*) echo "ERROR: Bash 4.0+ required" >&2; exit 1;; esac
declare -A type_abbreviations=(
[a]='arabic'
[r]='roman lowercase'
[R]='roman uppercase'
[l]='letters lowercase'
[L]='letters uppercase'
)
filename=
startpage=
type=
startpagenum=
[[ ${type_abbreviations[$type]} ]] && type=${type_abbreviations[$type]}
exec python3 -m pagelabels \
--startpage "$startpage" \
--type "$type" \
--firstpagenum "$startpagenum" \
--outfile "${filename%%.*}_toc.pdf" \
"$filename"
我有一个 python program 可以自定义 pdf 文件的页码。
它的用法是这样的:
usage: pagelabels [-h] [--outfile out.pdf] [--delete | --update]
[--startpage STARTPAGE]
[--type {arabic,roman lowercase,roman uppercase,letters lowercase,letters uppercase}]
[--prefix PREFIX] [--firstpagenum FIRSTPAGENUM]
[--load other.pdf]
file.pdf
Add page labels to a PDF file
我写了一个包装器 shell 脚本来节省在上面调用 pagelabels
时的输入。
#!/bin/bash
# Wrapper for `addpagelabels.py`.
display_usage() {
echo "Wrapper for addpagelabels.py"
echo -e "\nUsage: <inputpdf> <startpage> <type> <firstpagenum>\n"
echo -e "<type>:\n a=arabic;\n r=roman lowercase;\n R=roman uppercase;\n l=letters lowercase;\n L=letters uppercase.\n"
echo "Output file would be filename_toc.pdf"
}
if [ $# -eq 0 ]; then
display_usage
exit 1
else
a='arabic'
r='roman lowercase'
R='roman uppercase'
l='letters lowercase'
L='letters uppercase'
python3 -m pagelabels --startpage --type --firstpagenum --outfile ${1%%.*}_toc.pdf
exit 0
fi
脚本中定义的字符串变量不能被下面的第三个参数a
调用。
$ bash pdfpgn.sh dtjl.pdf 2 a 297
usage: addpagelabels.py [-h] [--delete] [--startpage STARTPAGE]
[--type {arabic,roman lowercase,roman uppercase,letters lowercase,letters uppercase}]
[--prefix PREFIX] [--firstpagenum FIRSTPAGENUM]
[--outfile out.pdf]
file.pdf
addpagelabels.py: error: argument --type/-t: invalid choice: 'a' (choose from 'arabic', 'roman lowercase', 'roman uppercase', 'letters lowercase', 'letters uppercase')
正确的做法是什么?
按照@Charles Duffy 的建议,我修改了我的 display_usage
函数如下:
display_usage() {
echo "Wrapper for pagelabels.py (python3 -m pagelabels). "
printf '%s\n' "Usage: pdfpgn.sh <inputpdf> <startpage> <type> <firstpagenum> <prefix>"
echo
printf '%s\n' "<type>:" " a=arabic" " r=roman lowercase" " R=roman uppercase" " l=letters lowercase" " L=letters uppercase"
echo
echo "Output file would be filename_pgn.pdf"
}
考虑一个关联数组(bash 相当于 Python 字典,尽管它的键和值只能是字符串)。
考虑:
#!/bin/bash
case $BASH_VERSION in ''|[123].*) echo "ERROR: Bash 4.0+ required" >&2; exit 1;; esac
declare -A type_abbreviations=(
[a]='arabic'
[r]='roman lowercase'
[R]='roman uppercase'
[l]='letters lowercase'
[L]='letters uppercase'
)
filename=
startpage=
type=
startpagenum=
[[ ${type_abbreviations[$type]} ]] && type=${type_abbreviations[$type]}
exec python3 -m pagelabels \
--startpage "$startpage" \
--type "$type" \
--firstpagenum "$startpagenum" \
--outfile "${filename%%.*}_toc.pdf" \
"$filename"