tilde=\~${PWD#~}
Я думаю, это то, что вы хотите?
Что приятно в тильде, так это когда она развернута в виде шаблона, который не нуждается в цитировании. Использование $HOME
таким же образом без кавычек приведет к непредсказуемым результатам, потому что любой из его составляющих символов может быть символом шаблона, и поэтому он не всегда может отображать ожидаемый результат.
Но расширение тильды определенно всегда должно происходить так, как если бы оно было результатом цитируемого расширения, и поэтому его результаты предсказуемы. Похоже, что это справедливо практически для каждой оболочки, которую я тестировал как для case
шаблонов, так и для шаблонов параметров, с заметными исключениями обоих ksh93
и mksh
по любым причинам - ни один из которых, кажется, не учитывает цитируемый аспект тильды в этом качестве.
Еще одна полезная вещь - это то, что вы можете переопределить $HOME
обработку любого каталога одинаково. Например:
cd ~
HOME=/some/prefix/I/would/like/to/trim
#or, perhaps more usefully, some scripted means of arriving at same
tilde=\~${OLDPWD#~}
HOME=$PWD
Вот еще один пример:
set 1 2 3 4 5 \~
cd ~; cd -; HOME= IFS=/
for d do shift
HOME=${*#~/}/$d
set ~ "$d" $HOME
done; cd -; HOME=$PWD
printf %s\\n "$@"
5/4/3/2/1/2/3/4/5/~/1/2/3/4/5/~
~
5
4
3
2
1
2
3
4
5
~
1
2
3
4
5
~