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 ".