2012-04-01 41 views
8

Phải thừa nhận rằng, tôi là một người mới chơi bash. Tôi luôn luôn muốn tiếp cận với Python cho các mục đích kịch bản lệnh shell của tôi. Tuy nhiên, tôi đang cố gắng để thúc đẩy bản thân mình để tìm hiểu một số bash. Tôi tò mò tại sao mã sau đây không hoạt động.Biến tập lệnh bash nội tuyến

sh -c "F=\"123\"; echo $F" 

Trả lời

13

Nó không làm việc vì biến mở rộng trong chuỗi dụng dấu ngoặc kép xảy ra trước lệnh được gọi. Đó là, nếu tôi gõ:

echo "$HOME" 

Vỏ biến này vào:

echo "/home/lars" 

Trước khi thực sự kêu gọi lệnh echo. Tương tự, nếu bạn gõ:

sh -c "F=\"123\"; echo $F" 

này được chuyển thành:

sh -c "F=\"123\"; echo" 

Trước khi gọi một lệnh sh. Bạn có thể sử dụng dấu ngoặc đơn để ức chế sự bành trướng biến, ví dụ:

sh -c 'F="123"; echo $F' 

Bạn cũng có thể thoát khỏi $ với một dấu chéo ngược:

sh -c "F=\"123\"; echo \$F" 
+0

Ngoài ra, nếu bạn đang cố gắng tìm hiểu 'bash', chi tiêu một số thời gian chất lượng với trang người dùng 'bash' và cũng có thể là [faq #bash] (http://mywiki.wooledge.org/BashFAQ). – larsks

+0

Ngoài ra, lưu ý rằng trong sting đơn trích dẫn nó không cần thiết để gạch chéo-thoát khỏi dấu ngoặc kép: ''F =" 123 "'' thay vì ''F = \" 123 \ "''. – larsks

+0

Cảm ơn! Làm cho ý nghĩa hoàn toàn. Đó là những chi tiết nhỏ tạo nên sự khác biệt lớn. :-) – Daniel

Các vấn đề liên quan