As variáveis não nomeadas são submetidas à divisão de palavras (depois que o parâmetro shell é expandido, espaços, tabulações e caracteres de nova linha são usados para dividir a variável expandida em argumentos separados) e globbing (expansão de símbolos curinga de shell). Como regra, você deve sempre citar duas vezes as variáveis do shell , a menos que queira especificamente a divisão de palavras e / ou globbing. Para mais informações, consulte o link
Se eu entendi sua pergunta corretamente, neste caso, você só precisa citar o parâmetro $results
:
messageStr="a senior leader of $2"
echo "$messageStr"
results=$(grep "$messageStr" "$1")
echo "results= $results"
A propósito, o uso de back-ticks é (efetivamente) obsoleto para a substituição de comando; é melhor usar $()
.
Adendo : link fornece feedback muito útil ao desenvolver scripts de shell (por exemplo, destacando variáveis não-nomeadas).