あなたのコードは、実際には期待通りBash 3.1まで動作します。 しかし、Bash 3.2以降、パターンマッチ演算子の動作が変更されました。
「パターンのいずれかの部分が 文字列として一致させることを強制するために引用される」
そしてそれは、ここで起こっている正確に何である:最新Bash Manualからの引用。 {}
をメタ文字として使用することを意図していましたが、引用したので、Bashはそれらを文字通り解釈します。 次の2つのオプション:
1.Youは、このようなshopt -s compat31
で3.1互換モードをオンにすることができます:右側からの引用を除去することで、
#!/bin/bash
shopt -s compat31
foo=baaz
regex='ba{2}z'
if [[ $foo =~ 'ba{2}z' ]]; then
echo "literal worked"
fi
if [[ $foo =~ $regex ]]; then
echo "variable worked"
fi
2.You CANポート、あなたのコードをそれは、関連だ場合
#!/bin/bash
foo=baaz
regex='ba{2}z'
if [[ $foo =~ ba{2}z ]]; then
echo "literal worked"
fi
if [[ $foo =~ $regex ]]; then
echo "variable worked"
fi
、私が実行している 'GNUのbashのは、バージョン4.2.8(1)-release(x86_64版-pc-linux-gnuのよう)'ナッティイッカク上:オペレーターの。 – splicer