我有一个sed脚本,替换字符串来自用户输入,例如
echo -n "Enter identity? "
read identity
sed -i "s:^export identity=.*:export identity='$identity':g" $CFG_FILE
问题是用户可能输入对sed具有特殊含义的值,例如:
abc:abc
在这种情况下,sed语句中使用的冒号字符会导致错误。
有没有办法让用户输入任何值,但如果某个值对sed有特殊意义那么它会被转义?
请注意,这个问题类似于:https://stackoverflow.com/questions/23186445/escape-replacement-string-from-bash-source-file
答案 0 :(得分:1)
由于您在替换中使用变量,因此需要转义表示分隔符的字符。使用shell参数扩展:
identity="${identity//:/\\:}"
这会将 abc:abc
转换为abc\:abc
,将abc:def:ghi
转换为abc\:def\:ghi
。
此外,您想使用:
read -r identity
代替。这将确保用户输入中的任何反斜杠都不会转义任何字符。