1

我想写一个简短的 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,那会很棒,但事实并非如此。我如何实现这一目标?

4

2 回答 2

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
于 2013-03-24T01:40:04.620 回答
1

使用评估:

i=2
a2=3
eval echo \$a$i
eval b=\$a$i
echo $b
于 2013-03-24T00:11:51.397 回答