54

declareBashで変数を入力する場合、との違いは何typesetですか?関数内で使用する場合:ととdeclareの違いは何ですか?typesetlocal

私が遭遇した唯一の違いは、タイプセットがkshスクリプトに移植可能であるということです。それ以外に、一方が他方よりも優先されるべき理由はありますか?

更新:local質問に追加されました。

4

3 に答える 3

34
  • typesetとの違いdeclare:

前者は移植性が高く (ksh など)、後者は移植性が問題にならない場合に適しています。

  • declare(またはtypeset) とlocal関数内で使用する場合の違い:

前者は後者を意味しますが、より強力です。たとえば、属性declare -i xx持たせたり、読み取り専用にしたりします。integerdeclare -r xx

于 2012-04-18T03:52:26.620 に答える
13

bashに関する限り、いいえ、違いはありません。実際、マンページでは同じ定義を共有しています

宣言[-aAfFilrtux][-p][name [=value]...]
タイプセット[-aAfFilrtux][-p][name [= value] ...]
変数を宣言するか、属性を指定します。名前が指定されていない場合は、変数の値を表示します。-pオプションは、各名前の属性と値を表示します。

私はまた、あなたが言及した移植性だけでなく、私の主張をさらに実証するこの小さな一口を見つけました。ksh

正確な同義語であるdeclareまたはtypesetビルトインにより 、変数のプロパティを変更できます。これは、特定のプログラミング言語で利用可能なタイピング[1]の非常に弱い形式です。宣言コマンドは、Bashのバージョン2以降に固有です。typesetコマンドは、kshスクリプトでも機能します。

于 2010-12-12T00:04:49.107 に答える
7

セクション4.2 Bash Builtin Commandsの下のBashマニュアルでは、次のように述べています。

'typeset'
typeset [-afFrxi] [-p] [NAME[=VALUE] ...]
'typeset' コマンドは、Korn シェルとの互換性のために提供されています。ただし、'declare' 組み込みコマンドを支持して非推奨になりました。

于 2010-12-12T02:52:05.167 に答える