Вот что происходит. Из справочной страницы bash (1), выделение мое:
Когда используется форма замещения в старом стиле, обратная косая черта сохраняет свое буквальное значение , за исключением случаев, когда следуют $, ‘или \. Первая обратная кавычка, которой не предшествует обратная косая черта, завершает подстановку команды. При использовании формы $ (команда) все символы в скобках составляют команду; никто не лечится специально.
Так что, скорее всего, вам нужно больше обратной косой черты для подстановки команды, чем простой команды.
Вы можете отладить это, установив set -x
:
# someidformatted=`echo "${someid}" | sed 's/\//\\\//'`
++ echo 314-12345/08
++ sed 's/\//\\//'
sed: 1: "s/\//\\//": bad flag in substitute command: '/'
+ someidformatted=
# someidformatted=$(echo "${someid}" | sed 's/\//\\\//')
++ echo 314-12345/08
++ sed 's/\//\\\//'
+ someidformatted='314-12345\/08'
Итак, вы можете видеть, что вхождение \\
превращается в \
. Добавление дополнительной обратной косой черты работает, но я предпочитаю форму $(command)
:
# someidformatted=$(echo "${someid}" | sed 's/\//\\\//')