Imprime uma string várias vezes [closed]

0

Eu tenho uma variável numvar que contém um número.

CÓDIGO

            something that reads number stored in numvar and then creates the same number of sTrapValue[with a number here that incrementally increases with each print from 0 to numvar]            

ENTRADA

echo $numvar
5

Devo criar $numvar times impressos sTrapValue[x] , em que x é um número incrementalmente crescente.

OUTPUT
Para outra variável bl

echo $bl
sTrapValue[0],sTrapValue[1],sTrapValue[2],sTrapValue[3],sTrapValue[4],sTrapValue[5].

Todos eles têm uma vírgula, apenas o último sTrapValue [] termina com um. (fullstop)

Qualquer comando para fazer isto Grep / sed / awk?

    
por SamFlynn 17.06.2015 / 11:32

3 respostas

1

Você pode usar isto:

$ numvar=5

$ bl="$(seq 0 "$numvar" | while read i; do echo "sTrapValue[$i]"; done) \
bl="${bl//$'\n'/,}" && bl="$(sed 's/$/./' <<<"$bl")" 

Tem três partes:

  • seq 0 "$numvar" | while read i; do echo "sTrapValue[$i]"; done gerará uma saída separada por nova linha mostrando as entradas sTrapValue[0-5] .

  • "${bl//$'\n'/,}" converterá todas as novas linhas em vírgulas.

  • $(sed 's/$/./' <<<"$bl") adicionará . no final.

Você também pode usar tr e sed para formatar a saída:

 bl="$(seq 0 "$numvar" | while read i; do echo "sTrapValue[$i]"; done | tr '\n' ',' | sed 's/,$/./')"

Teste:

$ echo "$bl"
sTrapValue[0],sTrapValue[1],sTrapValue[2],sTrapValue[3],sTrapValue[4],sTrapValue[5].
    
por heemayl 17.06.2015 / 11:54
1
sTrapValue[0]='a'; 
sTrapValue[1]='b'; 
sTrapValue[2]='c'; 
numvar=2; 
COUNTER=0; 
BL=""; 
while [ ! $COUNTER -gt ${numvar} ]; do 
  BL=${BL}${sTrapValue[$COUNTER]},; 
  let COUNTER=COUNTER+1; 
done; 
BL=$(echo ${BL} | sed 's/,$/./'); 
echo $BL;

= > a, b, c.

EDITAR:

Responda à pergunta editada:

numvar=2; 
COUNTER=0; 
BL=""; 
while [ ! $COUNTER -gt ${numvar} ]; do 
  BL=${BL}sTrapValue[${COUNTER}],; 
  let COUNTER=COUNTER+1; 
done; 
BL=$(echo ${BL} | sed 's/,$/./'); 
echo $BL;

= > sTrapValue [0], sTrapValue [1], sTrapValue [2].

    
por aldwinaldwin 17.06.2015 / 11:54
1

Se eu entendi sua pergunta corretamente, você está procurando algo como:

$ printf 'sTrapValue[%s],' $(seq 0 $numvar) | sed 's/,$/.\n/'
sTrapValue[0],sTrapValue[1],sTrapValue[2],sTrapValue[3],sTrapValue[4],sTrapValue[5].
    
por terdon 17.06.2015 / 12:38