Justin esclareceu sua pergunta em seu primeiro comentário sobre a resposta de quanta. Ele está lendo em uma linha de texto usando read
(ou por outros meios dinâmicos) e quer expandir o til.
A pergunta se torna "Como você executa a expansão do til no conteúdo de uma variável?"
A abordagem geral é usar eval
, mas ela vem com algumas advertências importantes, ou seja, espaços e redirecionamento de saída ( >
) na variável. O seguinte parece funcionar para mim:
read -p "Provide the destination directory: " DESTINATION
if [ ! -d "'eval echo ${DESTINATION//>}'" ]; then
echo "'$DESTINATION' does not exist." >&2;
exit 1;
fi
Experimente com cada uma das seguintes entradas:
~
~/existing_dir
~/existing dir with spaces
~/nonexistant_dir
~/nonexistant dir with spaces
~/string containing > redirection
~/string containing > redirection > again and >> again
Explicação
- O
${mypath//>}
remove caracteres>
, o que poderia afetar um arquivo durante oeval
. - O
eval echo ...
é o que faz a expansão real do til - As aspas duplas em torno do
eval
são para suporte de nomes de arquivos com espaços.
Como complemento, você pode melhorar o UX adicionando a opção -e
para ler:
read -p "Provide the destination directory: " -e DESTINATION
Agora, quando o usuário digitar na guia til e hits, ele será expandido. Essa abordagem não substitui a abordagem de avaliação acima, no entanto, como a expansão só acontece se o usuário clicar na guia. Se ele apenas digitar ~ / foo e pressionar, ele permanecerá como til.
Veja também: