宣言すると仮定しましょう
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//\//:}