De bash(1)
:
The order of expansions is: brace expansion, tilde expansion, parameter, variable and arithmetic expansion and command substitution (done in a left-to-right fashion), word splitting, and pathname expansion.
Ou seja, ele faz a expansão do til antes da expansão da variável, por isso não substitui $user_variable
com $1
(que, eu suponho, é " admin
") até depois de ter tentado e falhado em processar o ~
-
porque está procurando um usuário chamado " $user_variable
" em vez de um usuário chamado " admin
".