BASHの変数として現在の時刻/日付とスクリプトを使用してプログラムを停止する

BASHの変数として現在の時刻/日付とスクリプトを使用してプログラムを停止する

Raspberry Piスパイカムバグを作成しようとしています。個々のプロセスごとに作成された新しいファイルが表示されるようにしようとしています

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

良い結果。ただし、ファイルを更新せずに同じ問題でも$NOW時間を更新するには、エコーが必要です。/home/pi/.bashrc

. ~/.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の出力の前に引用符で囲まれているので、それがどのように機能するのかわかりません。

みんなありがとうございます! ! !

ベストアンサー1

するとき

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

またはより現代的な構文を使用して

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

NOWこの変数は、この行が実行されるとコマンドの出力に設定されます。dateでこれを行うと、~/.bashrc現在の$NOWインタラクティブシェルセッションの開始時期を示すタイムスタンプが表示されます。

以下を使用して変数値を設定することもできます。

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

bashバージョン4.2以降を使用している場合。これにより、呼び出さずにタイムスタンプが変数に直接印刷されますdate

表示されるスクリプトでは、NOWスクリプトの実行中に変数が設定されます(必要に応じて)。

割り当てるとき

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

実行後、シェルは文字列の変数を拡張します。二重引用符で囲んでも、これが行われます。 アポストロフィシェルが組み込み変数を拡張するのを防ぎます(これはいいえこの場合は何をしたいですか?)

filename呼び出しで実際に変数を使用していないようなので、最後に出力したいraspistill場合以外は、その値を設定する理由がわかりません。echo

コードの残りの部分では、$NOW変数拡張(および$filename)を二重引用符で囲む必要があります。これを行わずに、後で定義にNOWスペースまたはワイルドカード(ファイル名ワイルドカードパターン)が含まれるように定義を変更すると、使用するコマンドが$NOWそのコマンドラインを正しく解析できないことがあります。

たとえば、比較してみてください。

string="hello * there"

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

そして

string="hello * there"

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

関連事項:

おすすめ記事