如何在終端啟動後顯示所有新變數?

如何在終端啟動後顯示所有新變數?

通常在終端會話中我會做這樣的事情:

$ Source="/bin"

$ AllFiles=$(ls $Source/* | wc -l)

$ echo $AllFiles
159

echo $Source輸入等來echo $AllFiles顯示我在目前終端會話中定義的變數是很乏味的。如果我使用printenv我的螢幕充滿了我沒有定義的東西。如果我使用declare -p同樣的事情也會發生。

如何僅顯示我在此終端會話中定義的變數?

答案1

declare -p將向您顯示在環境變數之外定義的所有變量,其中包括您正在尋找的變數以及您不尋找的 121 個其他變數。

秘密是在gnome-terminal打開時捕獲預設變量,並從當前變數列表中減去預設變數以僅顯示新變數。

使用listvar

建立該listvar函數的說明如下。若要查看listvar函數的工作原理,請開啟終端機並輸入:

$ listvar

$ hey="Hey World :/"

$ listvar
declare -- hey="Hey World :/"

$ Word=Something

$ Number=25

$ Ubuntu=16.04

$ listvar
declare -- Number="25"
declare -- Ubuntu="16.04"
declare -- Word="Something"
declare -- hey="Hey World :/"

創造listvar

將其添加到您的末尾~/.bashrc

# Below must be at end of ~/.bashrc
# Display newly created variables
function listvar () {

    # Get current variable list
    mapfile -t CurrVars <<< "$(declare -p)"

    # Loop through each current variable
    for CurrVar in "${CurrVars[@]}" ; do

        # Skip over unwanted variables that are dynamic
        [[ "$CurrVar" == "declare -a BASH_"*    ]] && continue
        [[ "$CurrVar" == "declare -a FUNCNAME"* ]] && continue
        [[ "$CurrVar" == "declare -a PIPESTAT"* ]] && continue
        [[ "$CurrVar" == "declare -- _=\"\""*   ]] && continue
#        [[ "$CurrVar" == "declare -- sh="*      ]] && continue

        # Skip over variables used in our listvar function
        [[ "$CurrVar" == "declare -a SaveVar"*  ]] && continue
        [[ "$CurrVar" == "declare -- SaveVar"*  ]] && continue
        [[ "$CurrVar" == "declare -a CurrVar"*  ]] && continue
        [[ "$CurrVar" == "declare -- CurrVar"*  ]] && continue
        [[ "$CurrVar" == "declare -a OldVar"*   ]] && continue
        [[ "$CurrVar" == "declare -- OldVar"*   ]] && continue
        [[ "$CurrVar" == 'declare -- _="SaveV'* ]] && continue
        [[ "$CurrVar" == 'declare -- _="listv'* ]] && continue

        OldVar=false
        for SaveVar in "${SaveVars[@]}" ; do
            # Is current variable existing at time of save?
            [[ "$CurrVar" == "$SaveVar" ]]         && { OldVar=true ; break ; }
        done
        [[ $OldVar == false ]] && echo "$CurrVar"
    done

} # listvar


# Empty array to prevent doubling everytime ~/.bashrc is resourced
SaveVars=()
# Save variable list before user creates new ones in shell
mapfile -t SaveVars <<< "$(declare -p)"

儲存~/.bashrc檔案並開啟一個新的終端會話以使用listvar該功能。

相關內容