Sự khác biệt giữa khai báo và sắp chữ


22

Bất cứ ai cũng có thể giải thích sự khác biệt giữa khai báo và sắp chữ với các ví dụ thực tế.

Câu trả lời:


27

Trong bash, typesetdeclarehoàn toàn giống nhau. Sự khác biệt duy nhất là typesetđược coi là lỗi thời.

typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
    Set variable values and attributes.

    Obsolete.  See `help declare'.

Trang người đàn ông thậm chí liệt kê chúng trong cùng một hơi thở:

declare [-aAfFgilrtux] [-p] [name[=value] ...]
typeset [-aAfFgilrtux] [-p] [name[=value] ...]
    Declare variables and/or give them attributes.

typesetlà di động cho một số vỏ khác, ví dụ , ksh93. Nếu bạn đang nhắm đến tính di động xuyên vỏ, hãy sử dụng typeset(và đảm bảo rằng cách bạn đang gọi nó là di động). Nếu bạn không quan tâm đến tính di động như vậy, hãy sử dụng declare.


bạn có thể vui lòng cung cấp một số ví dụ về vị trí và lý do sử dụng trong tập lệnh bash
Rahul Patil

1
... Như tôi đã nói, chúng giống hệt nhau. Tôi không hiểu làm thế nào tôi có thể phân biệt chúng nếu chúng là như vậy.
Chris Down

2
Tốt một. Lưu ý rằng "lỗi thời" chỉ xuất hiện trong help typeset, không phải trong man typeset.
fedorqui

2
@ChrisDown, bạn sẽ không biết tại sao, chính xác, typesetbị coi là lỗi thời?
Alexej Magura

3

Tôi biết một trường hợp declarehữu ích để tránh điều ác eval: biến đổi không định hướng :

$ var=foo
$ x=var
$ declare "$x=another_value"
$ echo $var
another_value

Đây là một nhận xét tốt đẹp nhưng làm thế nào mà trả lời câu hỏi đó là về typesetdeclare?
jw013

Điều này đã được Chris Down trả lời rất tốt, câu trả lời của tôi chỉ là một trường hợp hữu ích
Gilles Quenot

Có lẽ tôi đã không rõ ràng. Bình luận nên là bình luận, và câu trả lời nên là câu trả lời. Đây là một nhận xét, không phải là một câu trả lời.
jw013

3
Đoạn trích của tôi sẽ không rõ ràng trong một bình luận
Gilles Quenot

nhưng bạn vẫn có thể gán các biến bằng bộ sắp chữ ... chỉ cần thay thế khai báo bằng bộ sắp chữ và bạn vẫn nhận được kết quả tương tự.
pcarvalho
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.