bash -c Quảng v = giá trị; echo $ vv hiển thị không có gì


9

Thực hiện các thao tác sau từ màn hình dòng comand:

bash -c "v=value; echo $v"

không hiển thị gì cả Ổn mà? Làm thế nào tôi có thể gán một giá trị cho một biến trong loại thực thi này?


Câu trả lời:


18

Có hai vỏ liên quan ở đây:

  • Shell gọi, shell tương tác mà bạn đang chạy này

  • Shell không đăng nhập, không tương tác, được sinh ra bởi bash -c

Bây giờ, vấn đề là, trong dấu ngoặc kép, các biến được mở rộng thành giá trị tương ứng của chúng, điều này đúng với mọi shell.

Vì vậy, như bạn đã sử dụng dấu ngoặc kép, việc mở rộng biến $v, thực sự đang diễn ra trong shell gọi chứ không phải shell được gọi. Nhưng tuyên bố, v=valueđang diễn ra trên vỏ được gọi là không tương tác.

Vì vậy, trong tổng số, bạn có biến được xác định trong shell được gọi và được mở rộng (trước) trong shell gọi. Vì biến giá trị không được đặt trong vỏ gọi, do đó bạn không nhận được gì trong đầu ra.

Bây giờ, để làm cho định nghĩa và mở rộng biến đổi diễn ra trong vỏ được sinh ra, hãy sử dụng dấu ngoặc đơn hoặc thoát $:

$ bash -c "v=value; echo $v"

$ bash -c 'v=value; echo $v'
value

$ bash -c "v=value; echo \$v"
value

1

Với dấu ngoặc kép $vđược thay thế bởi vỏ tương tác. Sử dụng dấu ngoặc đơn:

$ bash -c 'v=value;echo $v'
value
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.