Есть много вариантов. Вот несколько:
Несколько вещей мешают вашей команде работать.
Во-первых, bash никогда не будет выполнять раскрытие переменных (, раскрытие команд и т. д. )в одинарных кавычках. Вам нужно будет использовать двойные кавычки.
Кроме того, весьма вероятно, что $HOME
содержит по крайней мере одну косую черту, поэтому использование символа косой черты в вашей команде sed
в качестве разделителя между целевой и замещающей строками означает, что вам нужно экранировать любые косые черты, присутствующие в $HOME
:
$ echo $HOME | sed "s/${HOME//\//\\\/}/~/"
~
Отвечая на ваш комментарий ниже, да, вы также можете использовать операторы строковых переменных bash
для выполнения этого, и несколько более лаконично при этом:
$ echo $A
/home/jim/screenshot.png
$ echo "${A/$HOME/\~}"
~/screenshot.png