だから時間に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
答え2
呼び出しステートメントを編集して、次のことができます。
CALL="$(echo date -d \"$ENDTIME\" +\'%H:%M:%S\')"
\
文字"
やエスケープに使用できます'
。これで出力は次echo $CALL
のようになります。
date -d "22:46:37 today + 10 seconds" +'%H:%M:%S'
答え3
一重引用符を追加~へ二重引用符で囲まれたENDTIME
変数は次のとおりです。
ENDTIME="'$STARTIME today + 10 seconds'"
CALL="$(echo date -d "$ENDTIME" +'%H:%M:%S')"
それを与えなければならない
date -d '19:35:28 today + 10 seconds' +%H:%M:%S