ターミナルセッションでは、次のような操作を頻繁に行います。
$ 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
関数を使用します。