"~ / Desktop / test.txt: нет такого файла или каталога" - PullRequest
34 голосов
/ 07 декабря 2011

Я написал этот скрипт:

#!/bin/bash

file="~/Desktop/test.txt"
echo "TESTING" > $file

Скрипт не работает; это дает мне эту ошибку:

./tester.sh: line 4: ~/Desktop/test.txt: No such file or directory

Что я делаю не так?

Ответы [ 2 ]

56 голосов
/ 07 декабря 2011

Попробуйте заменить ~ на $HOME.Расширение тильды происходит только тогда, когда тильда не заключена в кавычки.См. info "(bash) Tilde Expansion".

. Вы также можете сделать file=~/Desktop без кавычек, но если вы когда-нибудь замените часть этого на что-то с разделителем полей, то оно сломается.Цитировать значения переменных, вероятно, является хорошей вещью, чтобы привыкнуть в любом случае.Кавычка переменной file=~/"Desktop" также будет работать, но я думаю, что это довольно уродливо.

Еще одна причина, по которой следует выбирать $HOME, когда это возможно: расширение тильды происходит только в начале слов.Таким образом, command --option=~/foo будет работать только в том случае, если command само выполняет расширение тильды, которое будет зависеть от команды, тогда как command --option="$HOME/foo" всегда будет работать.

1 голос
/ 11 апреля 2013

К вашему сведению, вы также можете использовать eval:

eval "echo "TESTING" > $file"

eval принимает команду в качестве аргумента и заставляет оболочку выполнить расширение Tilde .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...