制御文字を含む変数のパラメータ拡張

制御文字を含む変数のパラメータ拡張

ターミナルで「^]」として印刷され、8進コード035を持つグループ区切り文字制御文字をスペースに置き換えようとしています。

これは、次のようにtrを使用して簡単に実行できますecho $line | tr '\035' ' '

ただし、bashスクリプトでは外部コマンドを使用できないため、パラメータ拡張を使用して制御文字を空白に置き換えたいと思います。

制御文字を一致させるための正しい構文は何ですか?次のオプションは機能しません。

${line//'\035'/' '}
${line//'\0035'/' '}
${line//\035/' '}
${line//$'\035'/' '}

それとも、trやsedなどの外部コマンドを使用せずに文字を置き換える別の方法はありますか?

ベストアンサー1

最後のことがうまくいくと思います。

$ str=$(printf 'foo\035bar')
$ echo "${str//$'\035'/'X'}"
fooXbar

(一般的な理由で拡張の周りに二重引用符を追加しましたが、Bash 3.2ではこれは代替の一重引用符が最終的にリテラルになります)

特殊文字を変数に入れて途中で使用することもできます${var/pattern/replacement}

$ special=$'\035'
$ str=$'foo\035bar'
$ echo "${str//$special/X}"
fooXbar

おすすめ記事