Por padrão, scp caminhos remotos são interpretados em relação ao diretório base, assim você não precisa do ~ :
scp [email protected]:some/file/name filename
baixará some/file/name do diretório pessoal de user e o salvará como filename localmente. Quando você quiser usar um caminho de arquivo absoluto no servidor remoto, inicie-o com / : scp host:/etc/passwd passwd .
Estritamente, é possível que o seu servidor esteja interpretando as coisas de maneira diferente. Nesse caso, você poderia colocar ~ em seu script, em vez de repeti-lo na linha de comando toda vez (seja o mais preguiçoso que você quiser!):
scp [email protected]:~/"$location" "$name"
Dessa forma, seu shell nunca terá a chance de interpretá-lo. (Também é possível citar o ~ na linha de comando: \~ ou '~' , mas isso é mais trabalho do que o necessário.) No entanto, imagino que a primeira abordagem acima funcionará.
Outra observação sobre a variável name . Você diz que quer que seja apenas o nome do arquivo base. Existe um comando com esse objetivo exato, o comando basename :
name="$(basename "$location")"
Isso é mais simples do que executar tudo em sed .