5

PWD現在のパスにスペースが含まれている場合に変数で発生する最も厄介な問題が発生しました。私のコードは次のようになります。

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

現在のパスにスペース文字が含まれていない限り、これはうまく機能します。もしそうなら、$(pwd)に拡張されます

'mypath / with space'
ただの代わりに
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 に答える