0

我对如何在 shell 脚本的变量中搜索和替换特定字符感到两难。

例如,我有一个条件需要传递'~'给java 程序,但我应该传递它'/~'以避免它被截获为$HOME。我有一个shell 变量,例如$1 = '.-~' ,我将它作为参数直接传递给Java 程序。那么我如何修改这个变量以使其搜索'~'并且如果它找到然后更改$1 = '.-/~'以避免Java程序中的错误。

我试过$(1//~//~)了,但它给了我一个错误。

这也给了我一个错误。

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

2 回答 2

0

要替换 shell 变量中的字符串,可以使用 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

对于您的两次尝试,您有两个选择:

"${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 回答