What have I done wrong?
Em nenhuma ordem particular,
- Você não tem
#!/bin/bash
ou equivalente como primeira linha. - Parece que você não postou o script real que está falhando. (O que você tem aqui é sintaticamente correto.)
- Você não citou duas vezes suas variáveis,
"$n"
em vez de$n
. - Você está usando backticks obsoletos para avaliação em vez de
$( ...)
. - Você não testou seu código no link
- Você não recuou seus blocos de código para facilitar a leitura.
- Se você estiver adicionando elementos a uma matriz, use
array+=($num)
. O que você tem em seu código é a concatenação de string para o último elemento. - No (novo) primeiro bloco você atribui aos elementos (0 .. n-1), mas depois você usa elementos (1 .. n).
- No (novo) segundo bloco, você está comparando os índices de desigualdade em vez dos elementos da matriz. Você quis comparar
"${array[$i]}" -ne "${array[$j]}"
(ou, para o(( ... ))
construct,array[i] != array[j]
)?
(Eu provavelmente gostaria de salientar que algumas delas são boas práticas e não regras de codificação essenciais.)
Aqui está o seu código com as minhas sugestões aplicadas:
#!/bin/bash
read -p 'Number of elements: ' n
array=(0) # We don't use element zero
for i in $(seq "$n")
do
read -p 'Element: ' num
array+=($num)
done
for i in $(seq "$n")
do
for j in $(seq "$n")
do
# Compare the array elements rather than the indices
# Is this what you intended?
if (( array[i] != array[j] ))
then
echo "${array[$i]} ${array[$j]}"
fi
done
done