سؤال

لدي متغيرين:

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"؟

هل كانت مفيدة؟

المحلول

تم نقل الملف من ويندوز في الوضع الثنائي، والتي لا تزال تحتوي على أحرف إرجاع في نهايات الخطوط.

وهم رموز ^M الخاص بك، وأنها تتسبب في موقف النص للعودة إلى بداية السطر عندما يتم عرض القيم - حرف إرجاع في نهاية القيمة الأولى يجعل قيمة العرض الثاني في بداية الخط مرة أخرى، الكتابة فوق جزء من القيمة الأولى.

والإصلاح الصحيح هو نقل الملف من ويندوز باستخدام النص واسطة نقل، أو لتشغيل dos2unix على الملف بعد أن كنت قد نقله. (أو إذا كان الملف لن يتم تحويلها من Windows مرة أخرى، فقط حذف الأحرف ^M!)

نصائح أخرى

في نظام التشغيل Windows، السطر الجديد النموذجي هو (في أنظمة *nix يكون فقط).

\ ص هو النقل العودة.

هو خط جديد.

^ م يكون \ ص, ، لذا بعد كتابة $loginIP_BASE أنت في الموضع 0 من السطر الفعلي.

إذا كنت تريد إزالة كل تلك ^M فيمكنك القيام بذلك في vim o باستخدام sed باستخدام:

sed s/{ctrl+v}{ctrl+m}// file > new_file

({Ctrl+v} يعني الضغط على ctrl ثم v)

استخدم قيادة dos2unix:

dos2unix filename

واحد أكثر خدعة لإزالة السيطرة + M في محرر السادس:

:%s/^V^M//g
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top