Apa perbedaan antara mendeklarasikan dan mengeset

22

Adakah yang bisa menjelaskan perbedaan antara menyatakan dan mengeset dengan contoh kehidupan nyata.

Rahul Patil
sumber

Jawaban:

27

Di bash, typesetdan declarepersis sama. Satu-satunya perbedaan adalah yang typesetdianggap usang.

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

    Obsolete.  See `help declare'.

Halaman manual bahkan mencantumkannya dalam napas yang sama:

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

typesetportabel untuk beberapa kerang lainnya, misalnya ksh93,. Jika Anda mengincar portabilitas shell-silang, gunakan typeset(dan pastikan cara Anda menyebutnya portabel). Jika Anda tidak peduli dengan portabilitas seperti itu, gunakan declare.

Chris Down
sumber
dapatkah Anda memberikan beberapa contoh di mana dan mengapa penggunaan ini dalam skrip bash
Rahul Patil
1
... seperti yang saya katakan, mereka persis sama. Saya tidak mengerti bagaimana saya bisa membedakan mereka jika demikian.
Chris Down
2
Bagus Perhatikan bahwa "usang" hanya muncul di help typeset, bukan di man typeset.
fedorqui
2
@ ChrisDown, Anda tidak akan tahu mengapa, tepatnya, typesetdianggap usang?
Alexej Magura
3

Saya tahu kasus di mana declareberguna untuk menghindari kejahatan eval: tipuan variabel :

$ var=foo
$ x=var
$ declare "$x=another_value"
$ echo $var
another_value
Gilles Quenot
sumber
Ini adalah komentar yang bagus tetapi bagaimana itu menjawab pertanyaan tentang typesetdan declare?
jw013
Ini sudah dijawab dengan baik oleh Chris Down, tanggapan saya hanya kasus di mana itu berguna
Gilles Quenot
Mungkin saya tidak jelas. Komentar harus berupa komentar, dan jawaban harus menjadi jawaban. Ini adalah komentar, bukan jawaban.
jw013
3
Cuplikan saya tidak akan dihapus dalam komentar
Gilles Quenot
tetapi Anda masih dapat menetapkan variabel dengan setset ... ganti saja menyatakan dengan setset dan Anda masih mendapatkan hasil yang sama.
pcarvalho