我在如何搜索和替换shell脚本变量中的特定字符时陷入困境。
e.g。我有一个条件,我需要将'~'
传递给java程序,但我应该将其作为'/~'
传递,以避免它被截获为$ HOME。我有一个shell变量,例如$1 = '.-~'
我将它作为参数直接传递给Java程序。那么我怎样才能修改这个变量,使它搜索'~'
,然后找到然后更改$1 = '.-/~'
,以避免Java程序中的错误。
我试过$(1//~//~)
,但它给了我一个错误。
这也给了我一个错误。
sed 's#~#/#g' <<< $x;
答案 0 :(得分:0)
要替换shell变量中的字符串,可以使用如下的var修饰符:
${YOURVAR/The string you want to search/The string you want to replace to}
以示例:
${HOME/~/world} -> "hello ~" become "hello world"
答案 1 :(得分: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"