1

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

eval の使用:

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