Вопрос

Я столкнулся с очень неприятной проблемой, которая возникает на PWD переменная, если текущий путь содержит пробел.Мой код выглядит примерно так:

mycommand |sed -E '  
 s|mystuff|replacement| ;  
 s|'$(pwd)'|replacement| ;  
 '

Это прекрасно работает, если только текущий путь не содержит пробел.Если это так, $(pwd) расширен до

'mypath/with space'
вместо того, чтобы просто
mypath/with space

Это приведет к тому, что выражение sed будет испорчено (из-за дополнительных кавычек):

sed: 1: "s|mypath/with": unterminated substitute pattern

Я заметил, что расширение pwd не помогает: ${PWD//\'/}.

Есть идеи, как это можно решить?

Это было полезно?

Решение

Замените одинарные кавычки двойными и замените кавычки обратными кавычками вокруг pwd:

mycommand | sed -E "
 s|mystuff|replacement| ;
 s|`pwd`|replacement| ;
"

Двойные кавычки позволяют расширять переменные и команды в обратных кавычках.

Другие советы

что будет, если заменить

'$(pwd)'

с

'"$(pwd)"'

тогда будет выглядеть так:

mycommand | sed -E '  
 s|mystuff|replacement| ;  
 s|'"$(pwd)"'|replacement| ;  
 '
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top