Bash

目前時間/日期作為 BASH 中的變數並使用腳本停止程序

  • February 24, 2021

我正在嘗試創建一個樹莓派間諜凸輪錯誤。我正在努力做到這一點,以便為各種程序創建的新文件提出

NOW=`date '+%F_%H:%M:%S'`;

效果很好。但它需要一個回顯來更新時間 $NOW也在/home/pi/.bashrc文件中同樣的問題,不更新wo

. ~/.bashrc 

我*在這個論壇上*找到了它並且它有效:

#! /bin/bash

NOW=`date '+%F_%H:%M:%S'`;

filename="/home/pi/gets/$NOW.jpg"

raspistill -n -v -t 500 -o $NOW.jpg;

echo $filename;

我不明白它是如何工作的,因為它在 raspistil 的輸出和引號之前。

謝謝大家!!!

當你這樣做

NOW=`date '+%F_%H:%M:%S'`

或者,使用更現代的語法,

NOW=$( date '+%F_%H:%M:%S' )

該變數NOWdate在該行執行時設置為命令的輸出。如果您在 中執行此操作~/.bashrc,那麼$NOW將是一個時間戳,告訴您何時啟動目前互動式 shell 會話。

您還可以設置變數的值

printf -v NOW '%(%F_%H:%M:%S)T' -1

如果您使用的是bash4.2 或更高版本。這會將時間戳直接列印到變數中,而無需呼叫date.

在您顯示的腳本中,該變數NOW是在腳本執行時設置的(這就是您想要的)。

什麼時候分配

filename="/home/pi/gets/$NOW.jpg"

執行後,shell 會展開字元串中的變數。即使它是在雙引號中,它也會這樣做。 單引號會阻止 shell 擴展嵌入式變數(在這種情況下,這不是您想要的)。

請注意,您似乎實際上並沒有filename在呼叫中使用該變數raspistill,所以我不確定您為什麼設置它的值,除非您只是希望它echo在最後輸出。

在其餘的程式碼中,您應該用雙引號將$NOW變數擴展 (and $filename)。如果您不這樣做,並且稍後更改定義方式NOW以使其包含空格或萬用字元(文件名萬用字元模式),則使用的命令$NOW可能無法正確解析其命令行。

比較,例如,

string="hello * there"

printf 'the string is "%s"\n' $string

string="hello * there"

printf 'the string is "%s"\n' "$string"

相關事項:

引用自:https://unix.stackexchange.com/questions/428217