質問

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top