Monday, 16 September 2013

[bash] giải thích export qua 2 câu lệnh

hvn@archhvn: ~ () $ y=6; echo $$ $y; bash -c 'echo $$ $y'
2461 6
2586
hvn@archhvn: ~ () $ export z=7; echo $$ $z;  bash -c 'echo $$ $z'
2461 7
2599 7
$$ là biến đặc biệt của bash, in ra process id (PID) của process hiện tại.

Câu lệnh thứ nhất:
gán y = 6; in ra process ID của bash shell đang dùng và giá trị biến y đã gán,
chạy 1 sub-shell (chạy chương trình "bash" bên trong chương trình "bash") và thử in ra pid mới cùng với giá trị biến y.
Kết quả là biến y không chứa giá trị nào cả ở sub-shell mới tạo.

Hình ảnh của lệnh ps sẽ giúp bạn hình dung rõ hơn điều gì xảy ra (với một câu lệnh tương tự):



hvn@archhvn: ~ () $ y=1; bash -c 'echo VALUE OF Y is: $y;ps awwxf | tail -f -n4'
hvn@archhvn: ~ () $ export y=1; bash -c 'echo VALUE OF Y is: $y;ps awwxf | tail -f -n4'
Câu lệnh thứ 2:
với export, biến y đã được "xuất khẩu" sang sub-shell, vì thế nên khi sử dụng export, giá trị của biến y trả về bằng giá trị biến y ở parent shell