Bash citant de trajet de courant (PWD)
-
21-09-2019 - |
Question
Je l'ai rencontré un problème plus ennuyeux qui se produit sur la variable PWD
lorsque le chemin courant comprend un espace. Mon code ressemble un peu à ceci:
mycommand |sed -E '
s|mystuff|replacement| ;
s|'$(pwd)'|replacement| ;
'
Cela fonctionne très bien, à moins que le chemin actuel contient un espace. Dans le cas contraire, $(pwd)
est étendu à
'mypath/with space'au lieu de simplement
mypath/with space
Cette cause l'expression sed à foiré (à cause des citations supplémentaires):
sed: 1: "s|mypath/with": unterminated substitute pattern
Je l'ai remarqué que cela ne contribue pas à développer PWD comme ceci:. ${PWD//\'/}
Toutes les idées sur la façon dont cela peut être résolu?
La solution
Remplacer les guillemets simples guillemets doubles et remplacer les devis avec backquotes autour PWD:
mycommand | sed -E "
s|mystuff|replacement| ;
s|`pwd`|replacement| ;
"
Les guillemets doubles permettent une expansion des variables et des commandes backquoted.
Autres conseils
Et si vous remplacez
'$(pwd)'
avec
'"$(pwd)"'
ressemblerait à ceci alors:
mycommand | sed -E '
s|mystuff|replacement| ;
s|'"$(pwd)"'|replacement| ;
'