나는 시도했다: $ echo $HOME sed /$HOME/~/g
하지만 그것은 작동하지 않습니다. 아마도 슬래시 때문일까요?
누구든지 이 작업을 수행하는 스크립트를 가지고 있습니까?
- Bash 내장 기능 사용
- sed 사용
감사해요
답변1
명령이 작동하지 않는 원인이 몇 가지 있습니다.
첫째, bash는 작은 따옴표 내에서 변수 확장을 수행하지 않습니다(명령 확장 등도 수행하지 않음). 큰따옴표를 사용해야 합니다.
또한 $HOME
슬래시가 하나 이상 포함될 가능성이 높으므로 sed
명령에서 슬래시 기호를 대상 문자열과 대체 문자열 사이의 구분 기호로 사용하면 다음에 있는 모든 슬래시를 이스케이프해야 함을 의미합니다 $HOME
.
$ echo $HOME | sed "s/${HOME//\//\\\/}/~/"
~
아래 귀하의 의견에 대한 응답으로, 그렇습니다. bash
의 문자열 변수 연산자를 사용하여 이 작업을 수행하고 더 간결하게 할 수도 있습니다.
$ echo $A
/home/jim/screenshot.png
$ echo "${A/$HOME/\~}"
~/screenshot.png