Preciso dos meus efeitos aleatórios para mostrar a linha completa

1

Estou trabalhando em um script para previsões aleatórias e, infelizmente, em vez de o script ter as linhas completas das duas listas aleatórias (Things and Effects), ele imprime uma palavra aleatória de cada uma. Alguém pode me mostrar como fazer com que o script imprima a linha completa das duas listas. Abaixo está meu script:

#!/bin/bash
# Random lists picks
# This is a script for picking random choices as a prediction.


Things="Walk
Song
Talk
Friend
Spontaneous act
Call"

Effects="will bless you
will lift your spirit
is healthy
can help
will touch you
will make you smile
is what what you need
makes a difference in your life
can add comfort
isn't necessarily without virtue
adds something to your day"



things=($Things)
effects=($Effects)

num_things=${#things[*]}
num_effects=${#effects[*]}

echo -n " A ${things[$((RANDOM%num_things))]} "
echo ${effects[$((RANDOM%num_effects))]}
    
por HankG 27.04.2015 / 20:51

2 respostas

2

Você precisa definir a variável IFS (Internal Field Separator) de bash para nova linha \n enquanto cria uma matriz fora da variável para que cada entrada separada da variável na nova linha seja tomada como um elemento da matriz. Em seu script principal, a matriz está sendo criada a partir das entradas da variável separada no valor IFS padrão, ou seja, espaço, guia e nova linha.

Em suma, você precisa alterar essas duas linhas de declaração de matriz para:

IFS=$'\n' things=( $Things )
IFS=$'\n' effects=( $Effects )

Então, seu script final:

#!/bin/bash
# Random lists picks
# This is a script for picking random choices as a prediction.


Things="Walk
Song
Talk
Friend
Spontaneous act
Call"

Effects="will bless you
will lift your spirit
is healthy
can help
will touch you
will make you smile
is what what you need
makes a difference in your life
can add comfort
isn't necessarily without virtue
adds something to your day"



IFS=$'\n' things=( $Things )
IFS=$'\n' effects=( $Effects )

num_things=${#things[*]}
num_effects=${#effects[*]}

echo -n "A ${things[$((RANDOM%num_things))]} "
echo "${effects[$((RANDOM%num_effects))]}"
    
por heemayl 27.04.2015 / 21:19
1

Acho que você teve um pequeno desentendimento com o uso de matrizes.

#!/bin/bash
# Random lists picks
# This is a script for picking random choices as a prediction.

# Create array "things"
things=('Walk'
'Song'
'Talk'
'Friend'
'Spontaneous act'
'Call')

# Create array "effects"
effects=('will bless you'
'will lift your spirit'
'is healthy'
'can help'
'will touch you'
'will make you smile'
'is what what you need'
'makes a difference in your life'
'can add comfort'
"isn't necessarily without virtue"
'adds something to your day')

# Place the array size
num_things=${#things[@]}
num_effects=${#effects[@]}

echo -n " A ${things[$((RANDOM%num_things))]} "
echo "${effects[$((RANDOM%num_effects))]}"
    
por A.B. 27.04.2015 / 21:15