私はbashのスクリプトで初心者にそれはライン上文字列の置換 - 悪い置換誤り
#!/bin/bash
foo=foobarfoobar
echo ${foo//bar/baz}
悪い置換誤りが動作していないのはなぜ3
私はbashのスクリプトで初心者にそれはライン上文字列の置換 - 悪い置換誤り
#!/bin/bash
foo=foobarfoobar
echo ${foo//bar/baz}
悪い置換誤りが動作していないのはなぜ3
この置換はBash 4.2.8でうまく動作します〜する説明)。
あなたが実際にBashを使用していないことが私の最高の推測でしょう - どのようにスクリプトを呼び出すのですか? sh script.sh
を実行している場合は、ダッシュなどで実行している可能性があります(ダッシュは実際に行3に代入エラーを表示します)。 Bash(bash script.sh
)で明示的に実行してみてください。それはあなたが実際にダッシュを使用しているが判明した場合、いくつかの有用な相違点についての情報とどのように(あなたがしたい場合は)バックバッシュを使用しに行くためには、ここにあります
GNU bash、バージョン4.2.10(1)-release – Aristarhys
もし私がコマンドラインで同じことをしたら、それはうまく動作します – Aristarhys
私はbashテストを書いて作業を開始します – Aristarhys
$ foo=foobarfoobar
$ echo ${foo}/bar/baz
foobarfoobar/bar/baz
ちょうどあなたが持っていることをuderstandません間違った場所に中括弧がありますが、私はBASHの専門家ではないので、おそらくこれはあなたのためになる効果ではありません。
$ {foo // bar/baz} はすべてのバーをbazに置き換える必要がありますので、echoはfoobazfoobazです。http://tldp.org/LDP/abs/html/string-manipulation.html – Aristarhys
OPは'//'を使ってグローバル置換を行います。私は彼が彼の変数に 'bar/baz 'を追加したいとは思わない。彼は 'bar 'の出現を' baz'に置き換えて、 'foobazfoobaz'のように出力するようにしています。 –
すべてのbash文字列操作の記事でこのようなコードを使用していますが、うまくいきません – Aristarhys
それは私のシェル上正常に動作します。あなたのデフォルトのシェルは何ですか? –
barをbazに置き換える置換をしようとしている場合、これは正しいです。私のマシンで動作し、foobazfoobazをbash 3.2.48で印刷します。 –
GNU bash、バージョン4.2.10(1) - コマンドラインでは動作しますが、スクリプトでは動作しません – Aristarhys