5

PWD当当前路径包含空格时,我遇到了变量上发生的最烦人的问题。我的代码看起来有点像这样:

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

这很好用,除非当前路径包含空格字符。如果是,$(pwd)则扩展为

'mypath/带空格'
而不仅仅是
mypath/带空格

这会导致 sed 表达式混乱(因为额外的引号):

sed: 1: "s|mypath/with": 未终止的替代模式

我注意到像这样扩展 pwd 无济于事${PWD//\'/}

关于如何解决这个问题的任何想法?

4

2 回答 2

4

用双引号替换单引号,用 pwd 周围的反引号替换引号:

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

双引号允许扩展变量和反引号命令。

于 2009-09-07T10:11:38.563 回答
1

如果你更换会发生什么

'$(pwd)'

'"$(pwd)"'

看起来像这样:

mycommand | sed -E '  
 s|mystuff|replacement| ;  
 s|'"$(pwd)"'|replacement| ;  
 '
于 2009-09-07T10:14:04.893 回答