Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash中的正确引用:将i中存储的数字附加到_Linux_Bash - Fatal编程技术网

Linux Bash中的正确引用:将i中存储的数字附加到

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$(

我想写一个简短的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
,那就太好了,但事实并非如此。如何实现这一点?

使用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
你能给出一个具体的例子,说明你的脚本的输入和你想输入到输出中的页面集吗?您的伪代码几乎无法遵循。