命令在变量中-带引号的问题



我想将上周日的日期存储在一个变量中。

#/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

输出:

[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

那么为什么他声称&;date:额外操作数' ago' &;? 如何执行命令的结果并将其设置在变量中?

尝试使用数组来代替变量:

#!/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

输出
$ 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

相关内容

  • 没有找到相关文章

最新更新