私が使用するbash文字列の部分文字列を置き換えるstr
には:
str=${str/$pattern/$new}
ただし、現在、で実行されるスクリプトを作成していますash
。
を含む文字列が'/'
あり、上記の構文を使用'/'
して文字列内の を置き換えたいのですが、うまくいきません。
私は試した:
str=${str///a}
str=${str/\//a}
str=${str/'/'/a}
しかし、それらは機能しません
どうすれば修正できますか?
このパラメーター展開は、POSIX sh に対する bash 拡張です。IEEE 標準 1003.1 の関連セクションを確認すると、これは必須の機能ではないことがわかります。そのため、POSIX 準拠のみを約束するシェル ( など)ash
には、それを実装する義務はなく、実装が修正する義務もありません。とにかくそうする必要がある特定の正確さの基準に..
bash 拡張機能が必要な場合は、bash (または同様に拡張された他の ksh 派生物) を使用する必要があります。
その間、他のツールを使用できます。例えば:
str=$(printf '%s' "$str" | tr '/' 'a')
また
str=$(printf '%s' "$str" | sed -e 's@/@a@g')