Apa perbedaan antara mendeklarasikan dan mengeset


22

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

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.


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.