通常在終端會話中我會做這樣的事情:
$ 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
該功能。