code smith

開発で日々の生活をもっと楽しく

shell scriptでキャリッジリターンが入っている文字列を結合しようとするとなんかおかしい

Gakuです。 ちょっと前にshell scriptを業務中に書く機会があったんですが、すごいハマりを経験したので、その内容まとめておきたいと思います。

キャリッジリターンが入っている文字列を結合すると。。。

以下のような感じで"\r"のキャリッジリターンが入っている文字列を結合しようとします。

#!/bin/bash

test="test\r"
test2="aa"
echo $test$test2

で、期待結果としてはこんな感じだと思います。

test\raa

でも実際はこうなる。

aast

理由としてはキャリッジリターンが入っていると、カーソルが前に行って、上書きされるようになるみたいです。 なので、

test=`echo "test\r" | tr -d '\r'`
test2="aa"
echo $test$test2

のようにキャリッジリターンを取り除いてあげたりしないと意図した文字列結合になりません。

なんらかのデータをスクレイピングした結果を文字列結合したりするシーンは結構多いと思います。なんか上書きされてる!と思ったら、この現象で発生している可能性が高いです。
知っていればすぐ解決しますが、知らないとドハマリすると思うので、覚えておいて損はないかなと思った次第です。

Gakuからは以上です。