Saya punya satu pertanyaan singkat.
Apakah normal bahwa bash (saya menggunakan 4.4.11) tidak menampilkan baris / teks yang dipisahkan / diakhiri dengan polos \r
?
Saya sedikit terkejut melihat perilaku ini:
$ a=$(printf "hello\ragain\rgeorge\r\n")
$ echo "$a"
george
Tapi teks "halo lagi" masih ada, entah bagaimana "tersembunyi":
$ 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
Dan segera setelah kami bermain dengan bash baik-baik saja .... Tapi apakah ini risiko keamanan potensial? Bagaimana jika isi variabel "a" berasal dari dunia luar dan termasuk "perintah buruk" dan bukan hanya halo?
Tes lain, kali ini agak tidak aman:
$ 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>
Bayangkan yang tersembunyi, rm
bukan yang disembunyikan ls
.
Perilaku yang sama saat menggunakan echo -e:
$ a=$(echo -e "ls;\rGeorge\r\n"); echo "$a"
George
Apakah saya yang melakukan sesuatu yang salah ...?