Bash 中的 declare 命令

Nilesh Katuwal 2023年1月30日
  1. declare 命令的語法使用 Bash
  2. 選項作為 Bash 中 declare 命令的一般引數
  3. Bash 中 declare 命令中使用的整數型別
  4. 在 Bash 中宣告只讀變數
  5. 在 Bash 中分配變數時使用小寫大寫轉換
  6. 在 Bash 中使用 Subshells 匯出變數
  7. 在 Bash 中檢查是否指定了任何屬性
  8. 檢查 Bash 中的函式定義
Bash 中的 declare 命令

Bash 使用可以通過命令設定的屬性來允許類似型別的行為,因為 bash 型別系統不健壯。

declare 是一個內建的 Bash 命令,允許你在 shell 範圍內更改變數的特徵。

它還可以對變數進行速寫宣告。最後,它使你可以訪問變數。

declare -A 建立一個 associative array 變數,一個鍵值對陣列,其值由關鍵字索引。

除了影響其行為的變數之外,還可以為 Bash 函式賦予屬性。

declare 命令的語法使用 Bash

$ declare [-a] [-A] [-f] [-F] [-g] [-i] [-l] [-n] [-r]
        [-t] [-u] [-x] [-p] [name[=value]] [name[=value]] ...

選項作為 Bash 中 declare 命令的一般引數

declare 內建命令接受以下選項作為通用引數:

$ bash -c "help declare"

輸出:

declare: declare [-aAfFgilnrtux] [-p] [name[=value] ...]
    Set variable values and attributes.
    
    Declare variables and give them attributes. If no NAMEs are given,
    display the attributes and values of all variables.
    
    Options:
      -f	restrict action or display to function names and definitions
      -F	restrict display to function names only (plus line number and
    		source file when debugging)
      -g	create global variables when used in a shell function; otherwise
    		ignored
      -p	display the attributes and value of each NAME
    
    Options which set attributes:
      -a	to make NAMEs indexed arrays (if supported)
      -A	to make NAMEs associative arrays (if supported)
      -i	to make NAMEs have the `integer` attribute
      -l	to convert the value of each NAME to lower case on assignment
      -n	make NAME a reference to the variable named by its value
      -r	to make NAMEs `readonly`
      -t	to make NAMEs have the `trace` attribute
      -u	to convert the value of each NAME to upper case on assignment
      -x	to make NAMEs export
    
    Using `+` instead of `-` turns off the given attribute.
    
    Variables with the integer attribute have arithmetic evaluation (see
    the `let` command) performed when the variable is assigned a value.
    
    When used in a function, `declare` makes NAMEs local, as with the `local`
    command. The `-g` option suppresses this behavior.
    
    Exit Status:
    Returns success unless an invalid option is supplied or a variable
    assignment error occurs.

下面是一些 help 命令的示例,以檢視它們在終端中的顯示方式。值得注意的是,最後一個對於我們的 Windows Git Bash 使用者來說是一個故障保護。

現在你已經閱讀了 bash declare 的介紹和手冊頁,是時候檢視一些使用 bash declare 的實際示例了。

Bash 中 declare 命令中使用的整數型別

使用 -i 標誌將變數宣告為整數。你可以在下面的示例中看到變數 age 被指定為 integer 型別。

當你分配不同型別的字串值時,你可能會看到一條錯誤訊息,上面寫著 Not the correct type;而不是丟擲錯誤,錯誤變數將設定為零。

$ declare -i num=7
$ echo $num

輸出:

7

結果,將整數型別重新分配給字串會產生 0

$ num=string
$ echo $num

輸出:

0

在 Bash 中宣告只讀變數

這個編碼詞描述了一個變數如何被賦予一個值並且不能被程式設計師或機器修改。它在整個程式的生命週期內保持不變。

使用 -r 標誌使你的變數常量為只讀。

$ declare -r num=7

輸出:

bash: declare: num: readonly variable

如你所見,輸出結果顯示 readonly 變數。

在 Bash 中分配變數時使用小寫大寫轉換

將變數分配給 bash 時,可以使用 -l 小寫和 -u 大寫標誌將其從小寫更改為大寫,反之亦然。

$ declare -l name="THANOS"
$ declare -u name1="thanos"
$ echo $name $name1

輸出:

thanos THANOS

在 Bash 中使用 Subshells 匯出變數

如果你以前使用過 bash,你可能已經注意到人們使用 export 命令將宣告的變數匯出到指令碼或 shell 會話中的子 shell。我們可以用 declare 命令做同樣的事情。

-x 標誌應該用於匯出,而+x 標誌將阻止屬性被匯出。

$ declare -x name=thor
$ sh -c "echo $name"

輸出:

thor

在 Bash 中檢查是否指定了任何屬性

使用 -p 標誌,我們可以檢視屬性 variable 是否已定義。

$ a=5;b=6;c=7
$ declare -p a b c

輸出:

declare -- a="5"
declare -- b="6"
declare -- c="7"

指定關鍵字後,將有兩個破折號 --。宣告 -a 陣列。宣告 -n 數字。它用於顯示變數的型別 nameref

如果沒有宣告,它只會顯示。

檢查 Bash 中的函式定義

-F-f 標誌可用於檢查函式是否已宣告和定義。我正在製作一個簡單的 inevitable_thanos 功能。

$ function inevitable_thanos(){ echo "ironman"; }
$ declare -f

輸出:

inevitable_thanos ()
{ 
    echo "ironman"
}
quote ()