AIXでシェルで単に文字列結合して、標準出力したら、結合されずに上書きされてしまった。
やったこと↓
1 2 3 4 5 6 7 8 9 10 |
#!/bin/sh str1 = ファイルから読み込んだ文字列(12345) str2 = "ABCD" str = ${str1}${str2} echo $str -->想定結果 ABCDEFG12345 |
ファイルから読み取った文字列str1(12345)に、文字列ABCDを結合するので、結果は当然「12345ABCD」となるはず。。。
しかし、実際に動かしてみると、「ABCD5」となり、文字列が結合されず、str1に対して、str2が上書きされる結果となった。
最初はさっぱりわからなかったが、結局はstr1の末尾にCR(キャリッジリターン)が含まれていたからであった。
str1を読み取るファイルの改行コードがCRLFなっていたが、AIXの改行コードはLFのため、文字列を読み取った際に「12345」ではなく「12345<CR>」となっていたのである。CR(キャリッジリターン)はつまり、”カーソルを先頭に戻して”を意味するため、後続の文字列str2(ABCD)は一旦カーソルを先頭に戻した上で、結合されていたのであった。。。
わかってしまえば、大したことではないが一瞬何が起きてるのかさっぱりだった。改行コードはとても大事。