所以我想在时间上加上10秒。执行此操作的命令来自这里。
为了显示:
STARTIME="$(date +"%T")"
ENDTIME="$STARTIME today + 10 seconds"
CALL="$(echo date -d $ENDTIME +'%H:%M:%S')"
这段代码的问题是,如果我回显该$CALL
变量,它会给出:
date -d 12:51:19 today + 10 seconds +%H:%M:%S
该字符串的正确版本如下所示:
date -d "12:48:03 today + 10 seconds" +'%H:%M:%S'
但是如果我将变量名称用引号引起来,如下所示:
STARTIME="$(date +"%T")"
ENDTIME="$STARTIME today + 10 seconds"
CALL="$(echo date -d '$ENDTIME' +'%H:%M:%S')"
...它被解释为字符串文字,如果您回显它,它会给出:
date -d $ENDTIME +%H:%M:%S
所以我需要做的是调用变量,使其值交换到函数中并用双引号(“)括起来,但避免将变量的名称作为文字字符串读取。我对此感到非常困惑,我想念Python!
答案1
为了完整起见,您不需要所有这些 (") 也不需要最终的$(echo ...)
。这是产生相同效果的作业的简化版本:
STARTIME=$(date +"%T")
ENDTIME="$STARTIME today + 10 seconds"
CALL="date -d '$ENDTIME' +'%H:%M:%S'"
请注意,在执行 var=$(...) 时不需要引用,但通常使用 var="many Words" 时需要引用:
a=$(echo 'a b'); echo "$a" # result: a b
(") 内的 (') 没有特殊意义,反之亦然,例如:
a="that's nice"; echo "$a" # result: that's nice
a='that "is nice'; echo "$a" # result: that "is nice
答案2
您可以将通话语句编辑为:
CALL="$(echo date -d \"$ENDTIME\" +\'%H:%M:%S\')"
可以\
用来转义字符"
和'
。现在echo $CALL
将输出为:
date -d "22:46:37 today + 10 seconds" +'%H:%M:%S'
答案3
加上单引号里面你的双引号ENDTIME
变量,如下所示:
ENDTIME="'$STARTIME today + 10 seconds'"
CALL="$(echo date -d "$ENDTIME" +'%H:%M:%S')"
它应该给
date -d '19:35:28 today + 10 seconds' +%H:%M:%S