Justin esclareceu sua pergunta em seu primeiro comentário sobre a resposta dos quanta. Ele está lendo uma linha de texto usando read
(ou por outros meios dinâmicos) e deseja expandir o til.
A pergunta se torna "Como você realiza a expansão de til no conteúdo de uma variável?"
A abordagem geral é usar eval
, mas vem com algumas advertências importantes, como 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//>}
retira >
personagens que poderia espancar um arquivo durante a eval
.
- O
eval echo ...
que é a expansão de til atual
- As aspas duplas ao redor do
eval
são para suporte de nomes de arquivos com espaços.
Como complemento, você pode melhorar o UX adicionando a -e
opção de ler:
read -p "Provide the destination directory: " -e DESTINATION
Agora, quando o usuário digitar til e clicar na guia, 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 digitar ~ / foo e pressionar enter, ele permanecerá como um til.
Veja também:
cd "~/Desktop"
você também recebe um erro. Ele deve ser não citado ou armazenado como uma variável (sem aspas). Por exemplo,a=~/Desktop; cd $a;
funciona, mas nãoa="~/Desktop"; cd Desktop;
Veja serverfault.com/questions/417252/...