为什么在这个shell脚本中的结束时间与开始时间相同?

我的shell脚本:

$ cat sh1.sh #!/bin/bash STAT=$(adb get-state) DATE=$(date "+%Y-%m-%d_%H.%M.%S") LOG_FILE_PREFIX="log" LOGFILE="${LOG_FILE_PREFIX}_${DATE}.log" run () { #echo Start at $(date)>$LOGFILE echo Start at $(date) adb logcat -v time -b main -b system >>$LOGFILE # echo End at $(date)>>$LOGFILE } #trap "echo End at $(date)>>$LOGFILE" INT TERM EXIT #trap "echo End at $(date)>>$LOGFILE" INT trap "echo End at $(date)" INT QUIT EXIT TERM if [ $STAT != "device" ]; then echo "please connect to your phone using usb wire and re-run this script file!" exit else run fi 

结果:

 $ ./sh1.sh Start at 2016年 1月29日 星期五 18时21分22秒 CST ^CEnd at 2016年 1月29日 星期五 18时21分22秒 CST End at 2016年 1月29日 星期五 18时21分22秒 CST 

我想通过陷阱INT得到结束时间,但错误,为什么?

你应该单引号的trap命令,以扩大subhells和变量只有当它将被执行。

 trap 'echo End at $(date)' INT QUIT EXIT TERM 

使用双引号,设置陷阱时会插入日期,而不是执行其中的代码。