パターンを文字列に置き換える

パターンを文字列に置き換える

宣言すると仮定しましょう

test="/this/isjust/atestvariable/for/stringoperation"

私たちは "/"のすべてのインスタンスをコロン ":"に置き換えたいと思います。

その場合は、次のコマンドが機能する必要があると思います。

echo ${test//\/:}

${variable//pattern/string}すべてのパターン項目を指定された文字列に置き換えます)

しかし、echoを実行すると、${test//\/:}次のような出力が得られます。

/this/isjust/atestvariable/for/stringoperation

私はどこで間違っている可能性がありますか?ご協力ありがとうございます。

答え1

これ:

${test//\/:}

//すべてのインスタンス(オープンデュアルスラッシュで始まる)を/:何でも(2番目のエスケープされていないスラッシュを除く)に置き換えます。

これ:

${test/\//:}

取り替える最初(単一スラッシュが区切り文字として機能するため)/(エスケープ済み)のインスタンスはと同じです:

これ:

${test//\//:}

/のすべての項目はで置き換える必要があります:

例:

$ test="/this/isjust/atestvariable/:for/:stringoperation"
$ echo ${test//\/:}
/this/isjust/atestvariableforstringoperation
$ echo ${test/\//:}
:this/isjust/atestvariable/:for/:stringoperation
$ echo ${test//\//:}
:this:isjust:atestvariable::for::stringoperation

答え2

バックスラッシュを使用してスラッシュをエスケープします。

echo ${test//\//:}

関連情報