[英]bash - command in a variable - issue with quotes
我想将上周日的日期存储在一个变量中。
#/bin/bash
OFFSET=$(date +%u)
COMMAND="date --date='"$((OFFSET))" days ago' +%Y%m%d"
DATEFULL=$($COMMAND)
echo offset $OFFSET
echo command $COMMAND
echo datefull $DATEFULL
Output:
[root@localhost ~]# ./test.sh
date: extra operand ‘ago'’
Try 'date --help' for more information.
offset 1
command date --date='1 days ago' +%Y%m%d
datefull
在命令行中粘贴 $COMMAND 的结果会给出正确的结果:
[root@localhost ~]# date --date='1 days ago' +%Y%m%d
20210822
那么他为什么要声称“日期:额外的操作数'ago''”? 如何执行命令的结果并将其设置在变量中?
尝试使用 arrays 作为命令,而不是变量:
#!/bin/bash
OFFSET=$(date +%u)
COMMAND=(date "--date=$OFFSET days ago" +%Y%m%d)
DATEFULL=$("${COMMAND[@]}")
echo offset $OFFSET
echo command $COMMAND
echo datefull $DATEFULL
此外,所有大写变量名称都可能导致与 bash 定义的变量发生冲突。
我不确定为什么这不起作用。 我认为这与 bash 从命令中解析引号有关。 如果您使用eval
,它会起作用:
#/bin/bash
OFFSET=$(date +%u)
COMMAND="date --date='"$((OFFSET))" days ago' +%Y%m%d"
DATEFULL=$(eval "$COMMAND")
echo offset $OFFSET
echo command $COMMAND
echo datefull $DATEFULL
Output
$ OFFSET=$(date +%u)
$ COMMAND="date --date='"$((OFFSET))" days ago' +%Y%m%d"
$ DATEFULL=$(eval "$COMMAND")
$ echo offset $OFFSET
offset 1
$ echo command $COMMAND
command date --date='1 days ago' +%Y%m%d
$ echo datefull $DATEFULL
datefull 20210822
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.