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))]}"