簡體   English   中英

bash - 變量中的命令 - 引號問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM