tiếng vang của một chuỗi với một dấu chấm than


8

Đây là những gì tôi đưa vào bash và kết quả tôi nhận được về 'echo':

$ echo '!$'   
!$  
$ echo "!$"  
echo "'!$'"  
'!$'

Tôi muốn biết làm thế nào 'tiếng vang' xử lý với đầu vào thứ hai. Dường như với tôi, 'echo' trước tiên sẽ in các chuỗi (mở rộng một số nếu cần thiết) mà bạn đã nhập, sau đó thực thi nhất định nếu chúng có thể thực thi được.

Một ví dụ gây kinh ngạc hơn tôi có thể xây dựng nhưng không thể hiểu là:

$ echo '!$'  
!$  
$ echo "!echo "!$""  
echo "echo '!$' "'!$'""  
echo '!$' !$

Câu trả lời:


8

Trong lệnh:

echo "!$"

!$được mở rộng bởi bashtrước khi thông qua echo. Bên trong dấu ngoặc kép , nếu được bật, mở rộng lịch sử sẽ được thực hiện trừ khi bạn thoát !, sử dụng dấu gạch chéo ngược \. bashđã thực hiện việc mở rộng, echokhông làm gì ở đây, nó chỉ in những gì nó có.

! $ tham khảo đối số cuối cùng của lệnh trước đó là chuỗi '!$'.

Trong ví dụ thứ hai của bạn:

$ echo '!$'
!$
$ echo "!echo "!$""
echo "echo '!$' "'!$'""
echo '!$' !$

Lệnh echo "echo '!$' "'!$'"", đối số được truyền đến echođược chia thành ba phần:

  • Đầu tiên : "echo '!$' ", mở rộng thành chuỗi echo '!$'.
  • Thứ hai : '!$', mở rộng thành chuỗi !$.
  • Thứ ba : "", mở rộng thành chuỗi rỗng.

2

echo chỉ cần lặp lại các đối số của nó và gửi chúng theo tiêu chuẩn.

Tất cả các phép thuật được thực hiện bởi vỏ: Vỏ thay thế một số mô hình cho những người khác. chẳng hạn như các biến (bắt đầu bằng $), lịch sử (bắt đầu bằng !), v.v.

Xem bashhướng dẫn để biết thêm chi tiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.