Linux Bash中的正确引用:将i中存储的数字附加到
我想写一个简短的shell脚本,从pdf中删除指定的页面。也许我是以一种有点复杂的方式来做这件事的,但这就是我到目前为止想到的:Linux Bash中的正确引用:将i中存储的数字附加到,linux,bash,Linux,Bash,我想写一个简短的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$(
#!/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
,那就太好了,但事实并非如此。如何实现这一点?使用eval:
i=2
a2=3
eval echo \$a$i
eval b=\$a$i
echo $b
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
你能给出一个具体的例子,说明你的脚本的输入和你想输入到输出中的页面集吗?您的伪代码几乎无法遵循。