declareとtypesetの違いは何ですか


回答:


27

ではbash、typesetとdeclareまったく同じです。唯一の違いは、typeset古いと見なされることです。

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

    Obsolete.  See `help declare'.

マニュアルページには、それらが同じようにリストされています:

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

typesetは、他のいくつかのシェルに移植可能ksh93です。クロスシェルポータビリティを目指している場合は、を使用しますtypeset(呼び出し方が移植可能であることを確認してください)。このような移植性を気にしない場合は、を使用してくださいdeclare。


あなたは、いくつかの例を提供してくださいすることができますどこで、なぜbashスクリプトでこの使用
— ラーフルパティル

1
...私が言ったように、それらはまったく同じです。それらがそうである場合、私はそれらを区別する方法を理解していません。
— クリスダウン

2
良いもの。「廃止」はにでhelp typesetはなく、にのみ表示されることに注意してくださいman typeset。
— fedorqui 14

2
@ChrisDown、あなたはなぜ、正確に、typeset時代遅れと見なされるのかを知ることはないでしょうか?
— アレクセイマグラ

3

私declareは悪を避けるのに役立つケースを知っていますeval:変数の間接参照:

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

これは素敵なコメントですが、どのようにその答えはについてです質問しtypesetとdeclare?
— jw013

これは、すでによくクリス・ダウンによって回答され、私の応答はそれの便利念である
— ジルQuenot

おそらく、私ははっきりしていませんでした。コメントはコメントでなければならず、答えは答えでなければなりません。これはコメントであり、回答ではありません。
— jw013

3
私のスニペットは、コメントにクリアしないでしょう
— ジルQuenot

ただし、typesetを使用して変数を割り当てることはできます。declareをtypesetに置き換えるだけで、同じ結果が得られます。
— -pcarvalho
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.