Você precisa definir as coisas antes de usá-las:
BACKDIR="/backup"
BACKFILE="messages.txt"
BACKP="$BACKDIR/$BACKFILE"
...
Para expandir um pouco sobre o ponto, se o shell encontrar isso:
BACKP="$BACKDIR/$BACKFILE"
ele obtém o valor de BACKDIR
e o valor de BACKFILE
e os substitui. No seu exemplo original, ambos são indefinidos no momento em que o shell encontra a atribuição de BACKP. Os valores de variáveis indefinidas em um programa shell são substituídos por strings vazias , então a atribuição acima é equivalente a
BACKP="/"
Se você definir BACKDIR e BACKFILE primeiro, e então fizer a atribuição ao BACKP, como faço na primeira parte desta resposta, seus valores serão inseridos e você terá o equivalente a
BACKP="/backup/messages.txt"
que é o que você quer.