eva*_*vid 6 bash shell-script date quoting
所以我想给时间增加 10 秒。执行此操作的命令来自此处。
为了显示:
STARTIME="$(date +"%T")"
ENDTIME="$STARTIME today + 10 seconds"
CALL="$(echo date -d $ENDTIME +'%H:%M:%S')"
Run Code Online (Sandbox Code Playgroud)
我对这段代码的问题是,如果我回显$CALL
变量,它会给出:
date -d 12:51:19 today + 10 seconds +%H:%M:%S
Run Code Online (Sandbox Code Playgroud)
此字符串的正确版本如下所示:
date -d "12:48:03 today + 10 seconds" +'%H:%M:%S'
Run Code Online (Sandbox Code Playgroud)
但是如果我将变量名用引号括起来,就像这样:
STARTIME="$(date +"%T")"
ENDTIME="$STARTIME today + 10 seconds"
CALL="$(echo date -d '$ENDTIME' +'%H:%M:%S')"
Run Code Online (Sandbox Code Playgroud)
...它被解释为字符串文字,如果你回显它,它会给出:
date -d $ENDTIME +%H:%M:%S
Run Code Online (Sandbox Code Playgroud)
所以我需要做的是调用变量,使其值交换到函数中并用双引号(“)包装,但避免将变量的名称作为文字字符串读取。我对此非常困惑,我想念Python!
为了完整起见,您不需要所有那些 (") 或 final $(echo ...)
。这是您的作业的简化版本,可以产生相同的效果:
STARTIME=$(date +"%T")
ENDTIME="$STARTIME today + 10 seconds"
CALL="date -d '$ENDTIME' +'%H:%M:%S'"
Run Code Online (Sandbox Code Playgroud)
请注意在执行 var=$(...) 时如何不需要引用,但通常使用 var="many words":
a=$(echo 'a b'); echo "$a" # result: a b
Run Code Online (Sandbox Code Playgroud)
里面 (") a (') 没有特殊意义,反之亦然,例如:
a="that's nice"; echo "$a" # result: that's nice
a='that "is nice'; echo "$a" # result: that "is nice
Run Code Online (Sandbox Code Playgroud)