declare
Bashで変数を入力する場合、との違いは何typeset
ですか?関数内で使用する場合:ととdeclare
の違いは何ですか?typeset
local
私が遭遇した唯一の違いは、タイプセットがkshスクリプトに移植可能であるということです。それ以外に、一方が他方よりも優先されるべき理由はありますか?
更新:local
質問に追加されました。
typeset
との違いdeclare
:前者は移植性が高く (ksh など)、後者は移植性が問題にならない場合に適しています。
declare
(またはtypeset
) とlocal
関数内で使用する場合の違い:前者は後者を意味しますが、より強力です。たとえば、属性declare -i x
をx
持たせたり、読み取り専用にしたりします。integer
declare -r x
x
bashに関する限り、いいえ、違いはありません。実際、マンページでは同じ定義を共有しています
宣言[-aAfFilrtux][-p][name [=value]...]
タイプセット[-aAfFilrtux][-p][name [= value] ...]
変数を宣言するか、属性を指定します。名前が指定されていない場合は、変数の値を表示します。-pオプションは、各名前の属性と値を表示します。
私はまた、あなたが言及した移植性だけでなく、私の主張をさらに実証するこの小さな一口を見つけました。ksh
正確な同義語であるdeclareまたはtypesetビルトインにより 、変数のプロパティを変更できます。これは、特定のプログラミング言語で利用可能なタイピング[1]の非常に弱い形式です。宣言コマンドは、Bashのバージョン2以降に固有です。typesetコマンドは、kshスクリプトでも機能します。
セクション4.2 Bash Builtin Commandsの下のBashマニュアルでは、次のように述べています。
'typeset'
typeset [-afFrxi] [-p] [NAME[=VALUE] ...]
'typeset' コマンドは、Korn シェルとの互換性のために提供されています。ただし、'declare' 組み込みコマンドを支持して非推奨になりました。