如何自动检测变量中的变化,以便将其附加到另一个变量

时间:2015-12-07 10:10:32

标签: bash shell

我想编写一个脚本,假设有两个变量CURRENT_USERUSER_LIST。然后,只要CURRENT_USER的值发生变化,它就会自动附加到USER_LIST。例如。

# The value of the USER_LIST should change automatically
# having to check the variable CURRENT_USER explicitly.
CURRENT_USER="U1" # USER_LIST="U1"
CURRENT_USER="U2" # USER_LIST="U1 U2"
CURRENT_USER="U3" # USER_LIST="U1 U2 U3"
CURRENT_USER="U4" # USER_LIST="U1 U2 U3 U4"

请告诉我是否可以使用shell脚本。

2 个答案:

答案 0 :(得分:3)

您可以使用

声明一个被困的变量
declare -t CURRENT_USER

然后使用 DEBUG 陷阱。请参见示例12.2.3.1 here

在您的情况下,陷阱将是一个函数,如果它不存在,则会将CURRENT_USER的新值输入到列表中。

<强>更新

正如 chepner 指出的那样,您不需要标记变量。建立 DEBUG 陷阱就足够了:

trap 'monitor_current_user $CURRENT_USER' DEBUG

其中monitor_current_user是一个shell函数,用于记录(如果需要)此变量的值更改。

答案 1 :(得分:3)

如何使用函数更改CURRENT_USER而不是直接设置它?

switch_user() {
   CURRENT_USER=$1
   USER_LIST="${USER_LIST} ${CURRENT_USER}"
}

switch_user U1
switch_user U3

(该示例不检查USER_LIST中的重复项以保持简单)