我想写一个简短的shell脚本,它从pdf中删除指定的页面。也许我是以一种有点复杂的方式做到这一点,但这是我到目前为止所提出的:
#!/bin/bash
#This is a script to remove a specified page from a specified pdf.
set verbose
s="A1-$(($2-1))"
if [ n -ge 3 ]; then
for i in 2..$#
do
s+=A$(($($i)+1))-$(($($(($i+1)))-1))
done
fi
pdftk A="$1" cat $s A$(($($#)+1))-end output output.pdf
我知道这是非常复杂的代码,如果你知道pdftk的工作原理,我会很感激提示让它更容易,但是现在我只需要知道如何将变量替换为变量名。例如。如果
i=2
a2=3
echo $a($i)
给了我3
,这会很棒,但事实并非如此。我如何实现这一目标?
答案 0 :(得分:2)
bash
允许间接参数扩展:
$ i=2
$ a2=3
$ var="a$i" # a2
$ echo "${!var}"
3
你真正想要的是一个阵列:
$ a=([2]=3) # Or simply a[2]=3
$ i=2
$ echo "${a[i]}"
3
(这确实是一个止损答案,因为对于你的问题几乎肯定有一个更简单的答案,不涉及这种类型的间接参数操作。)
我认为这个更简单的脚本会做你想做的事情:
#!/bin/bash
inputfile=$1
shift
ranges=() from=1
for pageToOmit in "$@"; do
ranges+=( "A$from-$(( pageToOmit - 1))" )
from=$(( pageToOmit + 1 ))
done
ranges+=( "$from-end" )
pdftk A="$inputfile" cat "${ranges[@]}" output output.pdf
答案 1 :(得分:1)
使用eval:
i=2
a2=3
eval echo \$a$i
eval b=\$a$i
echo $b