2010-12-11 46 views
28

Khi nhập các biến trong Bash, sự khác biệt giữa declaretypeset là gì? Khi được sử dụng bên trong một hàm: sự khác biệt giữa declaretypesetlocal là gì?Sự khác nhau giữa khai báo, sắp xếp và biến cục bộ trong Bash

Sự khác biệt duy nhất tôi gặp phải là sắp chữ có thể di chuyển sang tập lệnh ksh. Ngoài ra, có bất kỳ lý do tại sao người ta nên được ưa thích hơn khác?

CẬP NHẬT: Đã thêm local vào câu hỏi.

+0

tương tự như [câu hỏi này] (http://stackoverflow.com/q/30362831/471376). – JamesThomasMoon1979

Trả lời

8

Theo như bash có liên quan, không, không có sự khác biệt. Trong thực tế, manpage đã đều chia sẻ cùng một định nghĩa

khai báo [-aAfFilrtux] [-p] [tên [= value] ...]
typeset [-aAfFilrtux] [-p] [tên [= value] ...]
Khai báo các biến và/hoặc cung cấp cho chúng các thuộc tính. Nếu không có tên nào là thì hãy hiển thị các giá trị của biến. Các tùy chọn -p sẽ hiển thị các thuộc tính và giá trị của mỗi tên ...

Tôi cũng thấy this little tidbit mà hơn nữa substantiates tuyên bố của tôi cũng như các ksh tính di động mà bạn đề cập.

Các khai báo hoặc builtins typeset, mà là từ đồng nghĩa chính xác, cho phép thay đổi các thuộc tính của các biến. Đây là một dạng rất yếu của việc gõ [1] có sẵn trong một số ngôn ngữ lập trình nhất định. Lệnh kê khai là cụ thể đối với phiên bản 2 hoặc mới hơn của Bash. Lệnh sắp chữ cũng hoạt động trong tập lệnh ksh.

+8

"help typeset" cho tôi biết rằng nó đã lỗi thời. Không được ủng hộ "tuyên bố". – lecodesportif

+0

đây là một ví dụ tốt về các vấn đề trong tài liệu bash và không nhất quán với trợ giúp dòng lệnh (sử dụng lệnh 'trợ giúp') và các trang hướng dẫn sử dụng, (sử dụng 'man bash' và SHELL BUILTINS) và trang nội trang (sử dụng 'man builtins'). Cũng có một số lỗi chính tả trong đó, vì vậy hãy cẩn thận – osirisgothra

3

Trong hướng dẫn Bash dưới phần 4.2 Bash Builtin Commands nó khẳng định:

'sắp chữ'
typeset [-afFrxi] [-p] [NAME [= VALUE] ...]
Các ' lệnh typeset 'được cung cấp để tương thích với vỏ Korn ; tuy nhiên, nó đã không được dùng để ủng hộ câu lệnh nội trang 'declare' .

15
  • Sự khác nhau giữa typesetdeclare:

Điều thứ nhất là hơn di động (ví dụ ksh.), Trong khi sau này là một lợi thế hơn khi di không phải là một mối quan tâm.

  • Sự khác nhau giữa declare (hoặc typeset) và local khi được sử dụng bên trong một hàm:

Cựu ngụ ý sau này, nhưng mạnh mẽ hơn. Ví dụ, declare -i x làm x có thuộc tính integer, declare -r x làm x readonly vv

+12

'local' và' declare' hầu như giống hệt nhau và lấy tất cả các đối số giống nhau với hai ngoại lệ: cục bộ sẽ thất bại nếu không được sử dụng trong một hàm và địa phương không có đầu ra bộ lọc args chỉ in địa phương, khai báo không. – ormaaj

+0

@ormaaj bạn nói đúng, tôi không nhận ra rằng 'local' cũng hỗ trợ các tùy chọn. Cảm ơn rất nhiều. –

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