【Linuxコマンド徹底解説】 195. Bashコマンド解析:declareの使い方と機能を詳しく解説

宣言する

変数を宣言し、その値とプロパティを設定または表示します。

文法

declare [-aAfFgilnrtux] [-p] [name[=value] ...]

主目的

  • 指定された属性を含むすべての変数と値を表示します
  • 指定された属性を含む 1 つ以上の変数と値を表示します
  • 1 つ以上の変数のプロパティと値を表示します
  • すべての変数のプロパティと値を表示し、関数の定義を表示します
  • すべての変数のプロパティと値を表示する
  • すべてのグローバル変数のプロパティと値を表示します
  • すべての関数名と関数定義を表示します。
  • すべての関数名のみを表示
  • 1 つ以上の関数名と関数定義を表示します。
  • 1 つ以上の関数名のみを表示します
  • グローバル変数を宣言します (オプション: 代入)
  • 変数を宣言します (オプション: 割り当て、属性)
  • 変数の属性の追加と削除 (オプション: 割り当て)

オプション

  • -f操作や表示を関数名と関数定義に限定します。
  • -F関数名のみを表示します (デバッグ時に行番号とソース ファイルが追加されます)。
  • -gシェル関数内で使用される場合はグローバル変数を作成します。それ以外の場合は無視されます。
  • -p各名前のプロパティと値を表示します。

*プロパティを設定するオプション:

  • -a配列を作成します (サポートされている場合)。
  • -A連想配列を作成します (サポートされている場合)。
  • -i整数属性を追加します。
  • +i整数属性を削除します。
  • -l小文字属性を追加すると、変数の値が小文字に変換されます。
  • +l小文字の属性を削除します。
  • -nこのオプションが存在する場合は、参照属性を追加します。
  • +nこのオプションが存在する場合、参照属性を削除します。
  • -r読み取り専用属性を追加します。
  • -t追跡プロパティを追加します。
  • +t追跡属性を削除します。
  • -uuppercase 属性を追加すると、変数の値が大文字に変換されます。
  • +u大文字の属性を削除します。
  • -xエクスポート プロパティを追加します。
  • +xエクスポート プロパティを削除します。

パラメータ

  • name(オプション): 変数名または関数名。
  • value(オプション): 変数の値。

戻り値

declaretrue不正なオプションまたは割り当てエラーを指定した場合を除き、返されます。例外を引き起こす特定の条件については、例外に関する説明の章を参照してください。

# 声明变量,当然也欢迎您在这个网站(感谢本项目发起人 @jaywcjlove)查询linux命令。
declare reference_website='https://wangchujiang.com/linux-command/'

# 显示所有包含整型属性的变量和值。
declare -i
# 定义变量b并赋值为3,具有整型属性。
declare -i b=5
# 显示属性,返回 declare -i b="5"。
declare -p b
# 删除整型属性。
declare +i b
# 显示属性,返回 declare -- b="5"。
declare -p b
# 根据变量属性强制转换值的英文大小写。
declare -u uc_var='abc'
declare -l lc_var='ABC'
# 显示'ABC abc';
echo "${uc_var} ${lc_var}"
# 定义函数内的全局变量
function test(){
    
    
  declare -g a=3
  # 或者
  local -g b=3
  # 或者
  c=3
  # 让我们查看它们的属性。
  declare -p a b c
}
# 执行函数。
test
# 返回结果。
# declare -- a="3"
# declare -- b="3"
# declare -- c="3"

# 定义函数外的全局变量
declare a=3
b=3
declare –p a b
# 返回结果如下。
# declare -- a="3"
# declare -- b="3"

# 定义局部变量
function test2(){
    
    
  local -i a=3
  declare -i b=3
}
test2
# 没有该变量(已经被销毁了)
echo "${a} ${b}"
# 因此,我们日常脚本中最常见的类似于'a=3'实际上是声明并赋值了一个全局变量。
# 在接下来的 **讨论** 环节会延伸讨论全局和局部变量问题。
# 注意,不能使用 `+a` 或 `+A` 取消数组,也不能使用 `+r` 取消只读属性。

# 定义只读数组,设置属性的同时定义赋值。
declare -ar season=('Spring' 'Summer' 'Autumn' 'Winter')
# 或者这样。
season=('Spring' 'Summer' 'Autumn' 'Winter')
declare -ar season
# 显示所有数组。
declare -a
# 定义关联数组。

declare -A fruits=(['apple']='red' ['banana']='yellow')
# 显示所有关联数组。
declare -A
# 显示所有变量的属性和值并显示函数的定义,输出很长。
declare
# 显示所有变量的属性和值。
declare -p
# 显示所有全局变量的属性和值。
declare -g
# 显示全部函数名和函数定义。
declare -f
# 只显示全部函数名。
declare -F

# 定义两个函数。
function func_a(){
    
     echo $(date +"%F %T"); }
function func_b(){
    
     cd /; ls -lh --sort=time; }
# 显示一到多个函数名和函数定义。
declare -f func_a func_b
# 只显示一到多个函数名,验证某个名称是否已经定义为函数时有用。
declare -F func_a func_b
# 最好不要让函数名和变量名相同。

話し合う

グローバル変数とローカル変数

上の例からも分かるように、日々プログラムを書く際にはこれらの概念を理解する必要がありますので、簡単に紹介しますが、もちろん、関連するコンテンツを簡単に検索することもできます。

  • グローバル変数: 削除されない限り、スクリプトの実行全体を通じて存在します。
  • ローカル変数: 関数内で定義され、関数の実行後に削除されます。

localコマンドは関数内で使用し、コマンドは関数外で使用することをお勧めしますdeclare

スクリプト内でグローバル変数を定義しすぎないでください。定義すると、他の関数から呼び出されたときに予期しない結果が生じる可能性があり、チェックアウトが不便になります。

必要なコメントが欠如していることは言うまでもありません - ZhuangZhu-74

関連情報:

  • Googleが提供するコーディング仕様
  • グローバル変数についての議論
  • declaretypesetexportlocalreadonlyコマンドについて

declare他のコマンドを定義できるのに、なぜ定義する必要があるのでしょうか?

ステートメントの意味がより明確になるため、たとえば次のようになります。

  • エクスポートされたプロパティの変数を設定するとき、export varおよびdeclare -x var
  • 関数内で変数を宣言するときに使用しますlocal
  • 読み取り専用変数を宣言するには、 を使用しますreadonly
  • typesetコマンドと同じdeclare

例外について

失敗にはさまざまな理由が考えられますがdeclare、このような場合には、bash オンライン ドキュメントdeclareセクション (最新バージョン) を参照するか、info bashビュー セクションで始まるdeclare最後の一連の文を実行してください。an attempt is

知らせ

このコマンドは組み込みの bash コマンドです。関連するヘルプ情報については、helpコマンドを参照してください。
プロパティのエクスポートについては、「export」コマンドを参照してください。
読み取り専用プロパティの概要については、「readonly」コマンドを参照してください。
参照属性の概要については、「unset」コマンドの例のセクションを参照してください。

ゼロから学ぶpython

[Pythonをゼロから学ぶ] 92. Pythonのリクエストライブラリを使用してHTTPリクエストを送信し、応答を処理する
[Pythonをゼロから学ぶ] 91. デコレータと辞書を使用して単純なWebアプリケーションでリクエストパスを管理する
[Pythonをゼロから学ぶ] 93. 辞書を使用する管理 リクエストパス
【ゼロから学ぶPython】 89. WSGIを使ってシンプルで効率的なWebサーバーを構築する
【ゼロから学ぶPython】 88. WSGIインターフェースの詳細解説:シンプルで効率的なWeb開発を実現する
【ゼロから学ぶPython】 87. 手動PythonでHTTPサーバーを構築する 実装とマルチスレッド同時処理
【Pythonをゼロから学ぶ】 86. HTTPプロトコルとブラウザとサーバー通信におけるその役割を深く理解する
【Pythonをゼロから学ぶ】 85. 並列コンピューティング技術の応用Pythonのプロセスプールで
【Pythonをゼロから学ぶ】】 84. スレッドとプロセスを深く理解する
【Pythonをゼロから学ぶ】 83. Pythonのマルチプロセスプログラミングとプロセスプールの利用
【Pythonをゼロから学ぶ】 82. チャットプログラムマルチスレッドに基づいた実装
[ゼロから学ぶ Python] 81. Python の詳細 スレッド通信とキューの応用
[ゼロから学ぶ Python] 80. グローバル変数へのスレッド アクセスとスレッド セーフティの問題
[ゼロから学ぶ Python] 79. スレッド アクセスグローバル変数とスレッドセーフティの問題
[Pythonをゼロから学ぶ] 78. ファイルダウンロード事例
[Pythonをゼロから学ぶ] 77. TCPサーバーのプログラミングと注意事項
[Pythonをゼロから学ぶ] 76. サーバーとクライアント: ネットワーク通信の主要コンポーネント
[Pythonを学ぶ] 75. TCPプロトコル:信頼性の高いコネクション指向の伝送層通信プロトコル
【ゼロから学ぶPython】 74. UDPネットワークプログラム:ポートの問題とバインディング情報を詳しく解説
【ゼロから学ぶPython】 73. UDPネットワークプログラム – データの送信
【ゼロから学ぶPython】 72. ソケット通信とソケットの作成方法
【ゼロから学ぶPython】 71. ネットワークポートとその機能
【ゼロから学ぶPython】 70. ネットワークの通信方式とその応用:ルータへの直接通信から複数のネットワーク接続まで
【ゼロから学ぶPython】 69. ネットワーク通信とIPアドレス分類分析
[Pythonをゼロから学ぶ] 68. Python正規表現の貪欲モードと非貪欲モード
[Pythonをゼロから学ぶ] 67. Pythonのreモジュール: 正規置換と高度なマッチング技術
[Pythonをゼロから学ぶ] 66 .正規表現を深く理解する:パターンマッチングとテキスト処理のための強力なツール
【Pythonをゼロから学ぶ】 65. Pythonの正規表現修飾子とその応用を詳しく解説
【Pythonをゼロから学ぶ】 64. re.compileメソッドPython正規表現で使い方を詳しく解説
【ゼロから学ぶPython】 63. 正規表現におけるre.Matchクラスとその属性・メソッドの紹介
【ゼロから学ぶPython】 62. Python正規表現:強力な文字列マッチングツール
【学ぶ】ゼロから学ぶPython】 61. Pythonのプロパティ属性の詳しい解説と応用例
【ゼロから学ぶPython】 60. Exploration Generator:反復のための柔軟なツール
【ゼロから学ぶPython】 59. Iterator:データトラバーサルを最適化するための効率的なツール
【 Pythonをゼロから学ぶ】58. Pythonのカスタム例外と例外の発生方法
【ゼロから学ぶPython】 57. Pythonでwithキーワードを使ってリソースを正しく閉じる
【ゼロから学ぶPython】 56. プログラミングにおける例外処理の重要性と応用
【ゼロから学ぶPython】 55. Pythonのシリアライズとサム デシリアライズ、 JSONとpickleモジュールの応用
【ゼロから学ぶPython】 54. メモリへのデータの書き込み
【ゼロから学ぶPython】 53. CSVファイルとPythonのCSVモジュール
【ゼロから学ぶPython】 52. ファイルの読み書き - Pythonファイル操作ガイド
[ Pythonをゼロから学ぶ】 51. Pythonでファイルとそのア​​プリケーションを開く・閉じる
【Pythonをゼロから学ぶ】 49. Pythonのオブジェクト関連の組み込み関数とその使い方
【Pythonをゼロから学ぶ】 48. 継承と多重化について詳しく解説Python の継承
[Python をゼ​​ロから学ぶ] 47. オブジェクト指向プログラミングにおける継承の概念と基本的な使用法
[Python をゼ​​ロから学ぶ] 46. Python デザイン パターンの __new__ および __init__ メソッドとシングルトンの分析
[Python をゼ​​ロから学ぶ] 45 . Pythonのクラスメソッドと静的メソッド
【ゼロから学ぶPython】 44. オブジェクト指向プログラミングのプライベートプロパティとメソッド
【ゼロから学ぶPython】 43. Pythonのオブジェクト指向プログラミングの例 プロパティとクラス属性
【ゼロから学ぶPython】 42. Pythonの組み込みプロパティとメソッド
【ゼロから学ぶPython】 41. Pythonの魔法のメソッド(2)
【ゼロから学ぶPython】 40. Pythonの魔法のメソッド(1)
【ゼロから学ぶPython】 39. オブジェクト指向の基本構文と応用例
【ゼロから学ぶPython】 38. Pythonパッケージの使い方とインポート方法
【ゼロから学ぶPython】 37. Pythonカスタムモジュールの使い方と注意点
【ゼロから学ぶPython】ゼロから学ぶ】Pythonを学ぶ】 36. Pythonでサードパーティパッケージ管理にpipを使う方法とテクニック
【ゼロから学ぶPython】 35. Pythonの共通システムモジュールとその使い方
【ゼロから学ぶPython】 34. インポートの詳細説明Pythonモジュールの使い方と使い方
【ゼロからPythonを学ぶ】 33. デコレータの役割(2)
【ゼロからPythonを学ぶ】 32. デコレータの役割(1)
【ゼロからPythonを学ぶ】 31. 上位概念を深く理解するPythonの順序関数とクロージャ
【Pythonをゼロから学ぶ】30. 再帰関数と無名関数を深く理解する
【Pythonをゼロから学ぶ】29. 「関数パラメータの詳細解説」 - Python関数パラメータのさまざまな使い方を理解する
【 Pythonをゼロから学ぶ】28. Python変数のローカル変数とグローバル変数
【Pythonをゼロから学ぶ】 27. Pythonの関数と入れ子呼び出しの使い方
【Pythonをゼロから学ぶ】 25. 関数:コード作成を効率化するツール
【ゼロから学ぶPython】 24. Pythonの文字列操作とトラバーサルメソッド
【ゼロから学ぶPython】 23. Pythonのセット(set)の使い方とよく使う操作
【ゼロから学ぶPython】 22. 追加、削除、変更、 Pythonのクエリ辞書変数
[ゼロから学ぶPython] 21. Pythonのタプルと辞書
【ゼロから学ぶPython】 20. Pythonのリスト操作スキルと例題
【ゼロから学ぶPython】 19. リストのループとリストのネストの応用
【ゼロから学ぶPython】 18. Pythonのリストの基本操作を詳しく解説(1)
【ゼロから学ぶPythonより】 17. Pythonの文字列のフォーマット方法(2)
【ゼロから学ぶPython】 16. Pythonの文字列のフォーマット方法(1)
【ゼロから学ぶPython】 15. 文字列と文字列を深く理解する文字セットエンコーディング
【ゼロから学ぶPythonから】14. Pythonの文字列に対するよくある操作(2)
【ゼロから学ぶPython】13. Pythonの文字列に対する共通の操作(1)
【ゼロから学ぶPython】12. Pythonの文字列の操作と応用
【 Pythonをゼロから学ぶ】 11. Pythonのループ文と制御フロー
【Pythonをゼロから学ぶ】 10. Pythonの条件文とifの入れ子を詳しく解説
【Pythonをゼロから学ぶ】 09. Pythonの条件判定文
【Pythonをゼロから学ぶ】 08 . Pythonでわかるビット演算子、演算子の優先順位
【ゼロから学ぶPython】 07. Pythonの演算子:代入演算子、比較演算子、論理演算子を詳しく解説 【ゼロ
から学ぶPython】 06. Pythonで算術演算子を使って計算や文字列の連結をする 【ゼロから学ぶPython
】スクラッチ] Python ] 05. Python の出力と入力
【ゼロから学ぶ Python】 04. Python プログラミングの基礎: 変数、データ型、識別子
【ゼロから学ぶ Python】 03. Python 対話型プログラミングとコメントの詳細説明
【Pythonをゼロから学ぶ】 02. 開発ツールの紹介
【Pythonをゼロから学ぶ】 01. Pythonのインストールと設定

おすすめ

転載: blog.csdn.net/qq_33681891/article/details/133266189