./tester.sh: line 4: ~/Desktop/test.txt: No such file or directory
Что я делаю неправильно?
Ответ 1
Попробуйте заменить ~ на $HOME. Расширение Тильды происходит только тогда, когда тильда не кавыдается. См. info "(bash) Tilde Expansion".
Вы также можете сделать file=~/Desktop без цитирования, но если вы когда-нибудь замените часть этого чем-нибудь разделителем поля в нем, тогда он сломается. Котировка значений переменных, вероятно, хорошая вещь, чтобы привыкнуть в любом случае. Цитирование переменной file=~/"Desktop" также будет работать, но я думаю, что это довольно уродливо.
Еще одна причина предпочесть $HOME, когда это возможно: расширение тильды происходит только в начале слов. Таким образом, command --option=~/foo будет работать, только если command делает сам расширение тильды, которое будет меняться по команде, а command --option="$HOME/foo" всегда будет работать.
Ответ 2
FYI, вы также можете использовать eval:
eval "echo "TESTING" > $file"
eval принимает команду как аргумент и вызывает оболочку для расширения Tilde.