Ai đó có thể giải thích những gì đang xảy ra đằng sau hậu trường trong nhân vật trốn thoát trong vỏ Linux? Tôi đã thử những điều sau đây và googled rất nhiều, mà không có bất kỳ thành công nào trong việc hiểu những gì (và làm thế nào) đang diễn ra:
root@sv01:~# echo -e "\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\\\ Hello!"
\\\ Hello!
root@sv01:~# echo -e "\n Hello!"
Hello!
root@sv01:~# echo -e "\\n Hello!"
Hello!
root@sv01:~# echo -e "\\\n Hello!"
\n Hello!
Tôi hoàn toàn bị mất ở đó, ví dụ, tại sao ba dấu gạch chéo ngược chỉ cung cấp một dấu gạch chéo ngược? Tôi mong đợi: hai cái đầu tiên sẽ được thoát thành một, cái thứ ba sẽ không tìm thấy gì để thoát nên nó sẽ vẫn là một dấu gạch chéo (dòng trong thí nghiệm đầu tiên), nhưng điều đang xảy ra là cái thứ ba sẽ biến mất.
Tại sao tôi nhận được một dấu gạch chéo ngược từ bốn \\\\ Hello
? Tôi hy vọng mỗi cặp sẽ đưa ra một dấu gạch chéo ngược -> hai dấu gạch chéo ngược.
Và tại sao tôi cần ba dấu gạch chéo ngược trong trường hợp cuối cùng để thoát \ n? Điều gì đang xảy ra trong nền của việc trốn thoát để có được điều đó? và nó khác với \\n
trường hợp như thế nào?
Tôi đánh giá cao bất kỳ lời giải thích về những gì đang xảy ra trong các dòng trước.
echo -e
không an toàn: echo
sẽ hoạt động theo tiêu chuẩn nếu cả hai posix
và xpg_echo
tùy chọn thời gian chạy được bật hoặc nếu được biên dịch với các tùy chọn thời gian xây dựng tương đương. Cách thực hành an toàn là sử dụng printf
thay thế - xem phần SỬ DỤNG ỨNG DỤNG và QUYẾT ĐỊNH của liên kết ở trên mô tả cách thực hiện printf
hành động thay thế echo
.
echo -e
hành vi không được xác định theo tiêu chuẩn nào - xem pubs.opengroup.org/onlinepub/9699919799/utilities/echo.html . Đầu ra hoàn toàn được xác định theo triển khai nếu có dấu gạch chéo theo nghĩa đen ở bất kỳ vị trí nào trong các đầu vào và tùy chọn được phép duy nhất là-n
(có nghĩa là việc triển khai tuân thủ tiêu chuẩn sẽ đượcecho -e
in-e
trên đầu ra của nó).