Прочитайте документацию GNU для расширения Bash Tilde (как и раньше, до моей первой итерации этого ответа).
~/Desktop и ~j0h делают принципиально разные вещи, которые объясняет, почему ~Desktop не работает:
Обычная ~ заменяет вашу текущую переменную среды $HOME, заданную при входе в систему. Поэтому ~ разрешает мне /home/oli для меня, а ~/Desktop читается как /home/oli/Desktop. Здесь вы видите, что тильда используется больше всего. ~username разрешает дому этого пользователя, как установлено в /etc/passwd. Таким образом, ~oli разрешает /home/oli, ~j0h может решить /home/j0h, но не обязательно, ваш homedir может быть где угодно. ~not-a-username не разрешается. Поскольку Desktop не является пользователем, ~Desktop не заменяется. Это воспринимается буквально как файл или путь с именем ~Desktop (которого здесь нет).И, разумеется, все это происходит удаленно (это было бы бесполезно в scp, если бы оно было заменено локальными значениями). Это работает, потому что Bash не будет заменять ~..., если ему предшествует что-либо, кроме пробелов.