Linuxシェルで文字列を配列の一重引用符に変換する効率的な方法

Linuxシェルで文字列を配列の一重引用符に変換する効率的な方法

ケース例:

Array=( "Mary" "had a __SingleQuote__little__SingleQuote__" "lamb" )
for i in "${Array[@]}"; do echo "$i"; done
Mary
had a __SingleQuote__little__SingleQuote__
lamb

欲しい変化文字列を__SingleQuote__次に変換アポストロフィ '文字なので、配列は次のようになります。

ConvertedArray=( "Mary" "had a 'little'" "lamb" )
for i in "${ConvertedArray[@]}"; do echo "$i"; done
Mary
had a 'little'
lamb

たぶん、次のようなものがあります。

ConvertedArray=( "$(echo ${Array[@]} | sed s/___SingleQuote__/\'/ )" )

ただし、このコマンドは誤った結果をもたらします。

Array=( "Mary" "had a __SingleQuote__little__SingleQuote__" "lamb" )
ConvertedArray=( "$(echo ${Array[@]} | sed s/___SingleQuote__/\'/ )" )
for i in "${ConvertedArray[@]}"; do echo "$i"; done
Mary had a __SingleQuote__little__SingleQuote__ lamb

何ですか正しいコマンドLinuxシェル(または解決策が具体的である必要がある場合はBash)でこれを行いますか?

ループを実装できますが、配列が非常に長くなる可能性があるため効率シェルツールを使用する場合に好ましい。

テスト済み:

  • コマンドtrですが、文字ごとに翻訳されます。
  • 「sed」コマンドを実行しましたが、「sed」構文に必要な一重引用符を処理できませんでした。

ベストアンサー1

では、bash要素ごとに配列要素にグローバルパラメータ置換を適用できる必要があります。

$ Array=( "Mary" "had a __SingleQuote__little__SingleQuote__" "lamb" )
$ ConvertedArray=( "${Array[@]//__SingleQuote__/\'}" )
$ printf '%s\n' "${ConvertedArray[@]}"
Mary
had a 'little'
lamb

例を見る検索と置換:配列

おすすめ記事