ATUALIZAÇÃO:
Para imprimir em um arquivo como você indica, aqui está um script atualizado:
#!/bin/bash
read -p 'How many tracks are there?' TRACKCOUNT
TRACK=1
while [ $TRACK -le $TRACKCOUNT ]
do
read -p "Track $TRACK: " TTITLE
echo "TTITLE$TRACK=${TTITLE:-No Name}" >> ./track_output.txt
(( TRACK++ ))
done
Para responder ao título da sua pergunta, consertar seu script para funcionar, e ir um pouquinho mais para cuspir os resultados em uma matriz indexada pelo número da faixa (por seu comentário):
#!/bin/bash
declare -a TRACK_ARRAY
read -p 'How many tracks are there?' TRACKCOUNT
TRACK=1
while [ $TRACK -le $TRACKCOUNT ]
do
read -p "Track $TRACK: " TTITLE
TRACK_ARRAY[$TRACK]="${TTITLE:-No Name}"
(( TRACK++ ))
done
echo "${TRACK_ARRAY[*]}"
Isso leva sua entrada e faz um loop, solicitando corretamente TRACK1
a TRACKN
, em que N
é o número digitado pelo usuário. No final, simplesmente imprimo todos os índices do array, já que não tenho idéia de como você o utiliza. Esta página é um começo (do TLDP) sobre como você pode trabalhar com esse array em bash
Você estava indexando incorretamente (teria percebido isso rapidamente depois de executá-lo), mas outro problema que você tinha era que estava tentando atribuir um nome de variável que tinha um $
contido nele: set TTITLE$TRACK=TTITLE
- isso não criará uma variável chamada TTITLE#
, em que #
é o valor de $TRACK
. Eu não posso dizer com segurança o que isso faz.
Ao tentar usar essa variável, você fez isso: echo ${!TTITLE$TRACK}
, em que o estrondo ( !
) é, na verdade, um estrondo comando tentando encontrar o comando mais recente começando com TTITLE...
(não o que você pretendia).