Когда quoting with single quotes, следующая следующая цитата заканчивается цитированием. Таким образом, последнее выражение на самом деле состоит из следующих частей:
's/%2$u/<ph name='
NUMBER
' ex='
%2$u
'\/>/g'
И внутри некотируемым частей, parameter expansion происходит. Таким образом, $u
получает замену на значение параметра u
или пустую строку, если она не существует. Вы можете проверить это с помощью простого echo
:
echo 's/%2$u/<ph name='NUMBER' ex='%2$u'\/>/g'
Чтобы избежать этого, либо использовать другую технику квотирование, е. г. двойные кавычки для частей, содержащих одиночные кавычки (помните, чтобы избежать $
в нем, в противном случае расширение происходит):
's/%2$u/<ph name='"'NUMBER'"' ex='"'%2\$u'"'\/>/g'
Или использовать двойные кавычки внутри заменяемой строки, если это применимо:
's/%2$u/<ph name="NUMBER" ex="%2$u"\/>/g'
'$ 'нужно будет сбежать в любом случае, нет? –
Внутри одной строки с кавычками вам не нужно скрывать '' 'для оболочки. Некоторые версии 'sed' не будут сопоставлять его с концом строки, если он не отображается в конце шаблона, но чтобы быть безопасным, вероятно, он должен быть экранирован до sed. –