![$HOME パスをチルダ ~ に変更するスクリプト ~ [重複]](https://linux33.com/image/162995/%24HOME%20%E3%83%91%E3%82%B9%E3%82%92%E3%83%81%E3%83%AB%E3%83%80%20~%20%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%20~%20%5B%E9%87%8D%E8%A4%87%5D.png)
私は試した: $ echo $HOME sed /$HOME/~/g
しかし、それはうまくいきません。おそらくスラッシュのためですか?
誰もがこれを行うスクリプトを持っていますか?
- Bash 組み込み機能の使用
- sedを使う
ありがとう
答え1
コマンドが機能しない原因はいくつかあります。
まず、bashは一重引用符内で変数拡張を実行しません(コマンド拡張なども実行しません)。二重引用符を使用する必要があります。
また$HOME
、1つ以上のスラッシュが含まれる可能性が高いため、sed
コマンドでターゲット文字列と代替文字列の区切り文字としてスラッシュ記号を使用すると、次のすべてのスラッシュをエスケープする必要があります$HOME
。
$ echo $HOME | sed "s/${HOME//\//\\\/}/~/"
~
下記のご意見に応じて、はい。bash
の文字列変数演算子を使用してこれを実行し、より簡潔にすることもできます。
$ echo $A
/home/jim/screenshot.png
$ echo "${A/$HOME/\~}"
~/screenshot.png