Tôi có một câu hỏi nhanh.
Có phải bình thường là bash (tôi đang sử dụng 4.4.11) không hiển thị các dòng / văn bản được phân tách / kết thúc bằng chữ thường \r
?
Tôi hơi ngạc nhiên khi thấy hành vi này:
$ a=$(printf "hello\ragain\rgeorge\r\n")
$ echo "$a"
george
Nhưng văn bản "xin chào lần nữa" vẫn còn đó, bằng cách nào đó "ẩn":
$ 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
Và ngay khi chúng ta chỉ chơi với bash là ổn .... Nhưng đây có phải là một rủi ro bảo mật tiềm ẩn không? Điều gì xảy ra nếu nội dung của biến "a" đến từ thế giới bên ngoài và bao gồm "các lệnh xấu" thay vì chỉ chào?
Một thử nghiệm khác, một chút không an toàn lần này:
$ 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>
Hãy tưởng tượng một ẩn rm
thay vì một ẩn ls
.
Hành vi tương tự khi sử dụng echo -e:
$ a=$(echo -e "ls;\rGeorge\r\n"); echo "$a"
George
Có phải tôi làm điều gì đó sai không ...?