Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell脚本,如何转义变量?_Shell_Sed_Escaping - Fatal编程技术网

shell脚本,如何转义变量?

shell脚本,如何转义变量?,shell,sed,escaping,Shell,Sed,Escaping,我正在编写一个shell脚本,在其中输入一个值,并希望将该值用于其他一些命令。我的问题是我想逃避这个值 例如,如果我输入http://example.com在以下脚本中 echo "Input a value for my_value" read my_value echo $my_value 这将导致http://example.com 但我希望的结果是http\:\/\/example\.com 我如何做到这一点 我试图运行的命令是 sed -i s/url/$my_value/g s

我正在编写一个shell脚本,在其中输入一个值,并希望将该值用于其他一些命令。我的问题是我想逃避这个值

例如,如果我输入
http://example.com
在以下脚本中

echo "Input a value for my_value"
read my_value

echo $my_value
这将导致
http://example.com

但我希望的结果是
http\:\/\/example\.com

我如何做到这一点


我试图运行的命令是

sed -i s/url/$my_value/g somefile.html

如果没有转义,它将变成
sed-is/url/http://example.com/g somefile.html
这显然是一个语法错误。

不需要在变量中转义
/
,您可以在
sed
中使用备用正则表达式分隔符:

sed -i "s~url~$my_value~g" somefile.html

无需在变量中转义
/
,您可以在
sed
中使用备用正则表达式分隔符:

sed -i "s~url~$my_value~g" somefile.html

您可以使用其他字符分割
s
参数。我喜欢

sed -i 's,url,http://example.com,g'
。如果确实需要,可以在执行之前使用sed替换参数中的
/

url=$(echo "http://example.com"|sed 's,/,\\/,g')
sed -i 's/url/'"$url"'/g' input

您可以使用其他字符分割
s
参数。我喜欢

sed -i 's,url,http://example.com,g'
。如果确实需要,可以在执行之前使用sed替换参数中的
/

url=$(echo "http://example.com"|sed 's,/,\\/,g')
sed -i 's/url/'"$url"'/g' input

要在任何非字母数字字符之前添加斜杠,请执行以下操作:

$ my_value=http://example.com
$ my_value=$(sed 's/[^[:alnum:]]/\\&/g' <<<"$my_value")
$ echo "$my_value"
http\:\/\/example\.com

要在任何非字母数字字符之前添加斜杠,请执行以下操作:

$ my_value=http://example.com
$ my_value=$(sed 's/[^[:alnum:]]/\\&/g' <<<"$my_value")
$ echo "$my_value"
http\:\/\/example\.com

您遇到的问题是,您只想用不同的文本字符串替换一个文本字符串,但sed无法对字符串进行操作。有关sed解决方案,请参阅,但您最好只使用可处理字符串的工具,例如awk:

awk -v old='original string' -v new='replacement string' '
    s=index($0,old) { $0 = substr($0,1,s-1) new substr($0,s+length(old)) }
    { print }
' file

您遇到的问题是,您只想用不同的文本字符串替换一个文本字符串,但sed无法对字符串进行操作。有关sed解决方案,请参阅,但您最好只使用可处理字符串的工具,例如awk:

awk -v old='original string' -v new='replacement string' '
    s=index($0,old) { $0 = substr($0,1,s-1) new substr($0,s+length(old)) }
    { print }
' file

myu-value=${myu-value//\/\/\/\/\/}
myu-value=${myu-value//\/\/\/\/\/}