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