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からは以上です。