0

シェル スクリプトの変数内の特定の文字を検索して置換する方法についてジレンマに陥っています。

たとえば'~'、Java プログラムに渡す必要がある条件がありますが'/~'、$HOME としてインターセプトされないように渡す必要があります。たとえば、シェル変数があり、$1 = '.-~' それを Java プログラムに引数として直接渡しています。では、Java プログラムのエラーを回避するために、この変数を検索し'~'、見つかった場合は変更するように変更するにはどうすればよいでしょうか。$1 = '.-/~'

試し$(1//~//~)ましたが、エラーが発生します。

また、これは私にエラーを与えました。

sed 's#~#/#g' <<< $x;
4

2 に答える 2

0

シェル変数の文字列を置き換えるには、次のように var 修飾子を使用できます。

${YOURVAR/The string you want to search/The string you want to replace to}

例:

${HOME/~/world} -> "hello ~" become "hello world"
于 2013-09-15T13:08:33.453 に答える
0

どちらの試行でも、2 つのオプションがあります。

"${1//\~//~}"  ## ~ in pattern needs to be backslash quoted.

sed 's#~#/~#g' <<< "$x"  ## $x should be placed in double quotes to prevent other word splitting or expansions. And you probably forgot ~.

代わりに置き換える他のバージョン\:

"${1//\~/\\~}"
sed 's#~#\\~#g' <<< "$x"
于 2013-09-15T14:59:08.783 に答える