だから時間に10秒を追加したいと思います。これを行うためのコマンドは、以下で提供されます。ここ。
表示するには:
STARTIME="$(date +"%T")"
ENDTIME="$STARTIME today + 10 seconds"
CALL="$(echo date -d $ENDTIME +'%H:%M:%S')"
このコードの問題は、$CALL
変数をエコーすると次のような結果が出ることです。
date -d 12:51:19 today + 10 seconds +%H:%M:%S
この文字列の正しいバージョンは次のとおりです。
date -d "12:48:03 today + 10 seconds" +'%H:%M:%S'
ただし、変数名を次のように引用符で囲むと、次のようになります。
STARTIME="$(date +"%T")"
ENDTIME="$STARTIME today + 10 seconds"
CALL="$(echo date -d '$ENDTIME' +'%H:%M:%S')"
...文字列リテラルとして解釈され、エコーすると次の結果が表示されます。
date -d $ENDTIME +%H:%M:%S
だから私がしなければならないのは、変数を呼び出してその値を関数に置き換えて二重引用符( ")で囲むようにすることです。ただし、変数名をリテラル文字列として読み取らないでください。これは非常に混乱しています。
ベストアンサー1
完全性のためにすべての項目( ")または最後の項目は必要ありません$(echo ...)
。以下は同じ効果を生み出す単純化された作業バージョンです。
STARTIME=$(date +"%T")
ENDTIME="$STARTIME today + 10 seconds"
CALL="date -d '$ENDTIME' +'%H:%M:%S'"
var=$(...) を実行する場合は引用は必要ありませんが、通常 var="many Words" を使用する場合は引用が必要です。
a=$(echo 'a b'); echo "$a" # result: a b
(')内部('')には特別な意味がなく、その逆も同様です.例えば、次のようになります.
a="that's nice"; echo "$a" # result: that's nice
a='that "is nice'; echo "$a" # result: that "is nice