bashを仮定しましょうシェルスクリプト良い:
#!/bin/bash
a=3
b=7
set -o posix
set
この場合は、変数set
または他のコマンドを実行してください。環境変数の印刷( env
, declare
... など) mya
とb
変数と 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
}
)