2012-01-22 11 views
11

私はbashのスクリプトで初心者にそれはライン上文字列の置換 - 悪い置換誤り

#!/bin/bash 
foo=foobarfoobar 
echo ${foo//bar/baz} 

悪い置換誤りが動作していないのはなぜ3

+0

それは私のシェル上正常に動作します。あなたのデフォルトのシェルは何ですか? –

+0

barをbazに置き換える置換をしようとしている場合、これは正しいです。私のマシンで動作し、foobazfoobazをbash 3.2.48で印刷します。 –

+0

GNU bash、バージョン4.2.10(1) - コマンドラインでは動作しますが、スクリプトでは動作しません – Aristarhys

答えて

48

この置換はBash 4.2.8でうまく動作します〜する説明)。

あなたが実際にBashを使用していないことが私の最高の推測でしょう - どのようにスクリプトを呼び出すのですか? sh script.shを実行している場合は、ダッシュなどで実行している可能性があります(ダッシュは実際に行3に代入エラーを表示します)。 Bash(bash script.sh)で明示的に実行してみてください。それはあなたが実際にダッシュを使用しているが判明した場合、いくつかの有用な相違点についての情報とどのように(あなたがしたい場合は)バックバッシュを使用しに行くためには、ここにあります

https://wiki.ubuntu.com/DashAsBinSh

+0

GNU bash、バージョン4.2.10(1)-release – Aristarhys

+0

もし私がコマンドラインで同じことをしたら、それはうまく動作します – Aristarhys

+0

私はbashテストを書いて作業を開始します – Aristarhys

-1
$ foo=foobarfoobar 
$ echo ${foo}/bar/baz 
foobarfoobar/bar/baz 

ちょうどあなたが持っていることをuderstandません間違った場所に中括弧がありますが、私はBASHの専門家ではないので、おそらくこれはあなたのためになる効果ではありません。

+0

$ {foo // bar/baz} はすべてのバーをbazに置き換える必要がありますので、echoはfoobazfoobazです。http://tldp.org/LDP/abs/html/string-manipulation.html – Aristarhys

+2

OPは'//'を使ってグローバル置換を行います。私は彼が彼の変数に 'bar/baz 'を追加したいとは思わない。彼は 'bar 'の出現を' baz'に置き換えて、 'foobazfoobaz'のように出力するようにしています。 –

+0

すべてのbash文字列操作の記事でこのようなコードを使用していますが、うまくいきません – Aristarhys