[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:46226] Re: [Q] sed expression



せきねなのです。

From: SHITAMORI Akira <shitamo@xxxxxxxxxxxxxx>
Date: Fri, 17 Mar 2006 19:16:47 +0900

> > % BASEURI_PATTERN=`echo $BASEDIR | sed 's/\./\\\./g' | sed 's/\//\\\//g'`
> > 
> > のようにすると
> > 
> > sed: 1: "s/\//\\//g": bad flag in substitute command: '/'
> > 
> > と怒られます。`` 内ではなく、普通に
> > 
> > % echo $BASEDIR | sed 's/\./\\\./g' | sed 's/\//\\\//g'
> > 
> > とすると意図した処理が行われるのですが、``で括ると違う挙動になるようで
> > す。しかも . → \. は怒られないのに / → \/ が怒られるのが分からない。
> > これについてどなたかご教授頂ければ幸いです。
> 
>  ``の中のときは\をエスケープするために\\にするんじゃないですかね?
> 
>  % BASEURI_PATTERN=`echo $BASEDIR | sed 's/\\./\\\\\\./g' | sed 's/\\//\\\\\\//g'`

ですね。POSIX な shell で `` より $() を奨める個人的な理由がこれです。

  % BASEURI_PATTERN=`echo $BASEDIR | sed 's/\./\\\./g' | sed 's/\//\\\//g'`

は `` を $() に以下のように変えれば意図した通りに動きます。

  % BASEURI_PATTERN=$(echo $BASEDIR | sed 's/\./\\\./g' | sed 's/\//\\\//g')

-- 
SEKINE Tatsuo:
 tsekine@xxxxxxxxxx    System Design & Research Inst. Co.,Ltd.
 http://www.amazon.co.jp/exec/obidos/ASIN/4797326522