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?
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:
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
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