ฉันมีหนึ่งคำถามที่รวดเร็ว
เป็นเรื่องปกติหรือไม่ที่ bash (ฉันใช้ 4.4.11) ไม่แสดงบรรทัด / ข้อความที่คั่น / จบด้วย plain \r
?
ฉันรู้สึกประหลาดใจเล็กน้อยที่เห็นพฤติกรรมนี้:
$ a=$(printf "hello\ragain\rgeorge\r\n")
$ echo "$a"
george
แต่ข้อความ "hello อีกครั้ง" ยังคงอยู่ที่นั่นอย่างใด "ซ่อน":
$ echo "$a" |od -w32 -t x1c
0000000 68 65 6c 6c 6f 0d 61 67 61 69 6e 0d 67 65 6f 72 67 65 0d 0a
h e l l o \r a g a i n \r g e o r g e \r \n
และทันทีที่เราเพิ่งเล่นกับ bash ก็โอเค .... แต่นี่เป็นความเสี่ยงด้านความปลอดภัยหรือไม่? เกิดอะไรขึ้นถ้าเนื้อหาของตัวแปร "a" มาจากโลกภายนอกและรวมถึง "คำสั่งที่ไม่ดี" แทนที่จะเป็นแค่คำทักทาย?
การทดสอบอื่นไม่แน่ใจในเวลานี้:
$ a=$(printf "ls;\rGeorge\n")
$ echo "$a"
George
$ eval "$a"
0 awkprof.out event-tester.log helloworld.c oneshot.sh rightclick-tester.py tmp uinput-simple.py
<directory listing appears with an error message at the end for command George>
ลองนึกภาพที่ซ่อนอยู่แทนซ่อนrm
ls
พฤติกรรมเดียวกันเมื่อใช้ echo -e:
$ a=$(echo -e "ls;\rGeorge\r\n"); echo "$a"
George
ฉันว่าเป็นสิ่งที่ผิดหรือเปล่า?