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

时间:2013-03-23 23:56:38

标签: 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$(($($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,这会很棒,但事实并非如此。我如何实现这一目标?

2 个答案:

答案 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