Como eu disse na minha resposta à pergunta vinculada, você não tem aspas simples misteriosamente aparecendo. As aspas simples fazem parte da exibição de rastreio do bash da sua linha de comando. O que você tem são aspas duplas, e você mesmo as colocou lá. Então não faça isso.
Sua melhor aposta é tornar needles
uma matriz; Há um exemplo na resposta à pergunta vinculada também, mas aqui está a solução para seu problema específico:
# Make needles an empty array
needles=()
# If medium is not empty, add two parameters to needles:
if [[ -n $medium ]]; then
# We quote *$medium* so that the asterisks won't get glob-expanded, and
# so that the value won't get word split even if it includes whitespace.
# NO QUOTES ARE ADDED TO THE VALUE.
needles+=(-iname "*$medium*")
fi
# The expression "{needles[@]}" means:
# expand this into each element of needles (needles[@])
# and don't expand the elements even if they include whitespace ("")
find "$path" "${needles[@]}" -type f -exec basename {} \; | gshuf -n 1