質問
2つの変数があります:
export portNumber=8888^M
export loginIP_BASE=10.1.172.2^M
これらを両方ともコロン「:」で区切られた単一行に印刷しようとしています。 " 10.1.172.2:8888"
のようになります。echo -n 'Login IP:'
echo -n $loginIP_BASE
echo -n ':'
echo $portNumber
しかし、代わりにこれを出力します:
:8888 IP:10.1.172.2
なぜそうするのですか?どうすれば自分のやりたいことを実現できますか?
また、変数は別のファイルから既に存在しているため、自分で作成しませんでした。 " ^ M"とは何ですか
解決
ファイルはWindowsからバイナリモードで転送されましたが、行の最後にキャリッジリターン文字が残っています。
これらは ^ M
シンボルであり、値が表示されるとテキスト位置が行の先頭に戻ります-最初の値の最後のキャリッジリターンにより、行の先頭に再び2番目の値が表示され、最初の値の一部が上書きされます。
正しい修正方法は、テキストモード転送を使用してWindowsからファイルを転送するか、転送後にファイルに対してdos2unixを実行することです。 (または、ファイルが再びWindowsから転送されない場合は、 ^ M
文字を削除してください!)
他のヒント
Windowsでは、典型的な新しい行は\ r \ nです(* nixシステムでは\ nのみです)。
\ r は復帰です。
\ n は改行です。
^ M は \ r なので、$ loginIP_BASEを書き込んだ後、実際の行の位置0になります。
これらすべての^ Mを削除する場合は、sedを使用してvim oで実行できます。
sed s/{ctrl+v}{ctrl+m}// file > new_file
({Ctrl + v}はctrl、次にvを押すことを意味します)
dos2unixコマンドを使用:
dos2unix filename
viエディターでCtrl + Mを削除するもう1つの方法:
:%s/^V^M//g
所属していません StackOverflow