In einer Terminalsitzung mache ich häufig folgende Dinge:
$ Source="/bin"
$ AllFiles=$(ls $Source/* | wc -l)
$ echo $AllFiles
159
Es ist mühsam, echo $Source
gefolgt von echo $AllFiles
usw. einzutippen, um die Variablen anzuzeigen, die ich in der aktuellen Terminalsitzung definiert habe. Wenn ich verwende, printenv
ist mein Bildschirm mit Dingen gefüllt, die ich nicht definiert habe. Wenn ich verwende, declare -p
passiert dasselbe.
Wie kann ich in dieser Terminalsitzung nur die Variablen anzeigen, die ich definiert habe?
Antwort1
declare -p
zeigt Ihnen ALLE außerhalb der Umgebungsvariablen definierten Variablen an. Dazu gehören die von Ihnen gesuchten Variablen, aber auch 121 andere Variablen, nach denen Sie nicht suchen.
Das Geheimnis besteht darin, beim Öffnen die Standardvariablen zu erfassen gnome-terminal
und diese von der Liste der aktuellen Variablen abzuziehen, um nur die neuen Variablen anzuzeigen.
Verwenden vonlistvar
Anweisungen zum Erstellen der listvar
Funktion finden Sie weiter unten. Um zu sehen, wie die listvar
Funktion funktioniert, öffnen Sie ein Terminal und geben Sie Folgendes ein:
$ 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 :/"
Erstellenlistvar
Fügen Sie dies am Ende Ihres hinzu ~/.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)"
Speichern Sie Ihre ~/.bashrc
Datei und öffnen Sie eine neue Terminalsitzung, um listvar
die Funktion zu nutzen.