شل سيناريو الطباعة محتويات المتغير يحتوي على إخراج الأمر يقوم بإزالة أحرف خطوط الإنترنت [مكررة

StackOverflow https://stackoverflow.com/questions/1483721

  •  18-09-2019
  •  | 
  •  

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

أنا أكتب برنامج نصي شل الذي سيقوم بتخزين إخراج الأمر في متغير، ومعالجة الإخراج، ثم صدى النتائج لاحقا. إليك ما لدي:

stuff=$(diff -u pens tape)
# process the output
echo $stuff

المشكلة هي، الناتج الذي أحصل عليه من تشغيل البرنامج النصي هو:

--- pens 2009-09-27 10:29:06.000000000 -0400 +++ tape 2009-09-18 16:45:08.000000000 -0400 @@ -1,4 +1,2 @@ -highlighter -marker -pencil -POSIX +masking +duct

في حين كنت أتوقع هذا:

--- pens 2009-09-27 10:29:06.000000000 -0400
+++ tape 2009-09-18 16:45:08.000000000 -0400
@@ -1,4 +1,2 @@
-highlighter
-marker
-pencil
-POSIX
+masking
+duct

يبدو وكأنه أحرف خطوط جديدة تتم إزالة بطريقة أو بأخرى. كيف يمكنني الحصول عليها أن يقول في؟

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

المحلول

إذا كنت ترغب في الحفاظ على الخطوط الجديدة، أرفق المتغير في علامات اقتباس مزدوجة:

echo "$stuff"

عندما تكتبها دون اقتباسات مزدوجة، تتوسع القذيفة $stuff في قائمة بالكلمات المنفصلة الفضاء (حيث "الكلمات" هي تسلسل الأحرف غير الفضائية، والأحرف الفضائية هي الفراغات والعلامات التبويب والحيوانات الجديدة؛ عند التجريب، يبدو أن موجزات النموذج، وإرجاع النقل والمسافات الخلفية لا تحسب كمساحة).


إظهار تفسير شخصيات التحكم كمساحة بيضاء. ASCII 8 هو Backspace، 9 هو علامة التبويب، 10 خط جديد (LF)، 11 عبارة عن علامة تبويب عمودي، 12 هو موجز نموذج، 13 هو عودة النقل. يقوم الأمر الأول بإنشاء سلسلة من الأحرف مفصولة بأحرف التحكم المختلفة. أصداء الأمر الثاني مع النتيجة مع الأحرف الأصلية المحفوظة - انظر تفريغ عرافة. يرصد الأمر الثالث النتيجة مع قشرة تقسيم الكلمات؛ يمكنك أن ترى أن علامة التبويب وحسمت Newline تم استبدالها فارغة (0x20).

$ x=$(./ascii 64 65 8 66 67 9 68 69 10 70 71 11 72 73 12 74 75 13 76 77)
$ echo "$x" | odx
0x0000: 40 41 08 42 43 09 44 45 0A 46 47 0B 48 49 0C 4A   @A.BC.DE.FG.HI.J
0x0010: 4B 0D 4C 4D 0A                                    K.LM.
0x0015:
$ echo  $x  | odx
0x0000: 40 41 08 42 43 20 44 45 20 46 47 0B 48 49 0C 4A   @A.BC DE FG.HI.J
0x0010: 4B 0D 4C 4D 0A                                    K.LM.
0x0015:
$ 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top