シェルスクリプトのエンコードの問題

シェルスクリプトのエンコードの問題

次のコードがあります。

#!/bin/bash
task=$1
xml=$(curl -sL "http://login:[email protected]/issues/$task.xml")
id=$(xmllint --xpath '//issue/id/text()' --format - <<<"$xml")
name=$(xmllint --xpath '//issue/subject/text()' --encode utf8 - <<<"$xml")

echo "task #$id - $name"

ただし、実行すると、次のようにキリル文字がエンコードされます。

task #10014 - &#x41B;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x43D;&#x43E;&#x43C;&#x435;&#x440; &#x43A;&#x43B;&#x438;&#x435;&#x43D;&#x442;&#x430;

問題を解決するのに役立ちます。このテキストをエンコードしたくありません。

答え1

数分間問題が発生した後は、通常はあきらめ、代わりに使用しますが、xmllintこれxmlstarletは通常期待どおりに機能する傾向があります。ここで:

xmlstarlet sel -t -v '//issue/subject' <<< "$xml"

(または<rant> XMLを完全に廃棄し、より合理的な形式を使用</rant>)。

関連情報