ターミナルの起動後にすべての新しい変数を表示するにはどうすればいいですか?

ターミナルの起動後にすべての新しい変数を表示するにはどうすればいいですか?

ターミナルセッションでは、次のような操作を頻繁に行います。

$ Source="/bin"

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

$ echo $AllFiles
159

現在のターミナル セッションで定義した変数を表示するには、 などにecho $Source続けて入力するのは面倒です。 を使用すると、定義していない内容で画面がいっぱいになります。 を使用すると、同じことが起こります。echo $AllFilesprintenvdeclare -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関数を使用します。

関連情報