Я хочу проверить, ~ / Файл tost1
существует с использованием переменной $ i, которая равна ~ / tost1
. Оператор If не работает с переменной. Есть ли способ исправить это?
i=~/tost1
$ echo $i
~/tost1
$ if [ -e ${i} ]; then echo "file exists"; fi
$ if [ -e ~/tost1 ]; then echo "file exists"; fi
file exists
Это работает на меня в 16.04 LTS, когда выполнено из командной строки в окне терминала,
$ i=~/tost1
$ echo "$i"
/home/sudodus/tost1
$ touch ~/tost1
$ if [ -e ${i} ]; then echo "file exists";else echo "file does not exist";fi
file exists
Но это - хорошая идея использовать $HOME
вместо тильды особенно, если Вы намереваетесь сделать сценарий оболочки с командами, которые Вы тестируете в интерактивном режиме, поэтому запустите с
$ i="$HOME"/tost1
$ touch ~/tost1
$ if [ -e "${i}" ]; then echo "file exists";else echo "file does not exist";fi
file exists
Это - хорошая привычка к переменным двойной кавычки, если Вы хотите избежать неприятных неожиданностей. (Существует несколько исключений.)
Примечание: OP заявила в комментариях, "я использую удар временно в termux приложении. Это, кажется, ведет себя по-другому, чем 'регулярный' удар". Это объясняет необычное поведение.
Согласно bash 4.3
руководство использовало в Ubuntu 16.04:
Каждое переменное присвоение проверяется на неупомянутые префиксы тильды сразу после a: или первое =. В этих случаях также выполняется тильда expanion.
В Вашем конкретном случае тильду рассматривают как буквенный символ и Ваш [
ищет файл в каталоге, который, как буквально предполагается, называют ~
. Вот почему это перестало работать.
Переменная условий применения $HOME
вместо этого, т.е. $HOME/tost1
.