Почему расширение тильды не произошло в выводе этого сценария?
#!/bin/bash
read -p "Enter filename: " fname
if [[ -d $fname ]]
then
echo "$fname is a directory"
else
echo "$fname is not a directory"
fi
Вывод:
$ bash -x test_cd.sh
+ read -p 'Enter filename: ' fname
Enter filename: ~/Music
+ [[ -d ~/Music ]]
+ echo ' ~/Music is not a directory'
~/Music is not a directory
Это просто потому что read
не выполняет расширение тильды прежде, чем сохранить строку, и при этом это не выполняется на переменном содержании позже. Можно использовать $HOME
вместо этого и войти
$HOME/Music
или позвольте сценарию протестировать на ~/
и замените его (взятый из этого ответа):
case "$fname" in "~/"*)
fname="${HOME}/${x#"~/"}"
esac
Можно также использовать bash
Расширение параметра на замену ~/
с $HOME
в начале строки:
if [[ -d ${fname/#~\//$HOME\/} ]]
Эта переменная расширена, прежде чем замена выполняется.