BASH文字列連結は「^ M」文字を追加します。

BASH文字列連結は「^ M」文字を追加します。

ファイルを1行ずつ読み取るための次のスクリプトがあります。

_PATH=$(pwd)
LOCATION_PATH="$_PATH/inventory.sh"
LETTER="l"
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo $line >> file2.test
    CALL="${LOCATION_PATH} ${line} ${LETTER} 1234"
    echo $CALL >> file.test
    echo =========
    RESULT=$($CALL)
    #echo $RESULT
done < "$1"

ただし、各行の入力ファイル^Mには(キャリッジリターン)文字はありませんが、file.testファイルの出力には次のような文字が含まれています。

/.../inventory.sh 00000e99-bce9-11e4-8418-06e8ce2b06d8^M l 1234
/.../inventory.sh 0001688b-bce7-11e4-8418-06e8ce2b06d8^M l 1234

file2.testの出力にも^M文字がありません。

次を交換してみました。

SP=" "
LE="l"
...    
    CALL="${LOCATION_PATH}${SP}${line}${SP}${LE}${SP}1234"

役に立たない。

ベストアンサー1

^MはWindowsの行終端であるため、$ {line}変数を指定してWindowsが入力データを生成したことを意味します。 Windowsで編集したファイルをLinuxに転送する場合は、Unix / Linuxで使用する前に「dos2unix」コマンドを実行する必要があります。

このような場合を確認するには、入力ファイルで "od -Xc"コマンドを実行して16進数でダンプし、改行の代わりにキャリッジリターン/改行を見つけます。 \n の代わりに \r\l のような文字が表示された場合、犯人を見つけたのです。

おすすめ記事