Melhor maneira de recuperar o valor do parâmetro posicional n-th (índice) em 'ash' e depois em 'eval echo \ $$ n'?

1

Eu desejo ao usuário select um arquivo de uma lista numerada na tela em um ambiente mkinitcpio busybox ash . A lista precisa ser preenchida / classificada de cima para baixo e impressa em colunas, como:

1) 2017-12-17   3) 2017-12-19   5) 2017-12-21   7) 2017-12-23  9) 2017-12-25
2) 2017-12-18   4) 2017-12-20   6) 2017-12-22   8) 2017-12-24

Estou imprimindo para a tela usando printf linha por linha. É por isso que você normalmente usaria um array. Como busybox ash carece de suporte à matriz, o hack é usar set para criar uma matriz de homem pobre usando parâmetros posicionais ( $1=2017-12-17 , $2=2017-12-18 , etc.).

Por enquanto, consigo recuperar o valor do parâmetro posicional usando:

file=$(eval echo \$$i)

Existe uma maneira melhor de recuperar o n-ésimo parâmetro posicional em ash ?

Notas

  1. A coluna acima é um exemplo simplificado, os nomes reais dos arquivos contêm também carimbos de data / hora, como por exemplo 2017-12-27-060056 .
  2. Mkinitcpio busybox 1.27.2 compile config .
por Pro Backup 27.12.2017 / 14:27

1 resposta

0

Você pode usar shift. É melhor que eval.

cat busy.sh

leshift () {
  shift "$1"
  echo "$1"
}
echo param debut
echo $#
echo $@
for i in "$@" ; do
  echo "$i"
done

echo param shift
read a # number from 1 to 5
b=$(leshift "$a" "$@")
echo $b

echo param fin
echo $#
echo $@
for i in "$@" ; do
  echo "$i"
done

Você chama assim

./busy.sh a b 'c h' d e
    
por 28.12.2017 / 13:06