シェルスクリプトで定義された変数のみを印刷するには?

シェルスクリプトで定義された変数のみを印刷するには?

bashを仮定しましょうシェルスクリプト良い:

#!/bin/bash 
a=3
b=7
set -o posix
set

この場合は、変数setまたは他のコマンドを実行してください。環境変数の印刷( env, declare... など) myab変数と a を出力します。多くの変数(および機能)は環境(PATH、、、PWD...TEMPなど)から来ます。

すでに存在する変数だけを印刷する方法はありますか?スクリプト中に定義体?

ベストアンサー1

スクリプトの先頭に変数リストを保存し、スクリプトのどこかにある値と比較できます。同様のコマンドの出力はset明確ではありません。同様のコマンドは、set | sed 's/=.*//'値に改行文字を含む変数では機能しません。 (Bashでは実際には文字列変数に対しては機能しますが、配列には機能しません。関数コードも表示します。)

variables=$(tmp=$(declare -p +F); declare () { echo "${2%%=*}"; }; eval "$tmp")

したがって、initial_variables=…スクリプトの先頭に設定し、後で値と比較してください。echoリストで直接作業することに加えて、他の方法を使用できます。

initial_variables=" $(tmp=$(declare -p +F); declare () { echo "${2%%=*}"; }; eval "$tmp") "
( tmp=$(declare -p +F)
  declare () {
    case "$initial_variables" in
      *" $2 "*) :;; # this variable was present initially
      *) eval "set -- \"\$$2\" \"\$2\""; echo "locally defined $2=$1";;
    esac
  }
)

おすすめ記事