Цитата текущего пути в Bash (pwd)
-
21-09-2019 - |
Вопрос
Я столкнулся с очень неприятной проблемой, которая возникает на 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| ;
'
Не связан с StackOverflow