diff --git a/data/helpers.d/string b/data/helpers.d/string index b77b42ef7..adfdf89fe 100644 --- a/data/helpers.d/string +++ b/data/helpers.d/string @@ -22,8 +22,19 @@ ynh_string_random() { # (see sed manual page for more information) ynh_replace_string () { delimit=@ - match_string=${1//${delimit}/"\\${delimit}"} # Escape the delimiter if it's in the string. + + # Escape any backslash to preserve them as simple backslash. + match_string=${match_string//\\/"\\\\"} + replace_string=${replace_string//\\/"\\\\"} + + # Escape the & character, who has a special function in sed. + match_string=${match_string//&/"\&"} + replace_string=${replace_string//&/"\&"} + + # Escape the delimiter if it's in the string. + match_string=${1//${delimit}/"\\${delimit}"} replace_string=${2//${delimit}/"\\${delimit}"} + workfile=$3 sudo sed --in-place "s${delimit}${match_string}${delimit}${replace_string}${delimit}g" "$workfile"