Проблема с косыми чертами: ваша переменная содержит их, и последняя команда будет выглядеть примерно так: sed "s/string/path/to/something/g"
, содержащая слишком много слешей.
Поскольку sed
может принимать любой символ в качестве разделителя, вы можетепопробуйте использовать другой, который не указан в строке замены:
replacement="/my/path"
sed -e "s@pattern@$replacement@"
Обратите внимание, что это не является пуленепробиваемым: если строка замены содержит позже @
, она сломается по той же причине, и любойпоследовательности обратной косой черты, такие как \1
, будут по-прежнему интерпретироваться в соответствии с правилами sed.