それで、時間に10秒を追加したいと思います。そのためのコマンドは here からのものです。
説明する:
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
だから私がする必要があるのは、その値が関数に入れ替えられて二重引用符( ")でラップされるように変数を呼び出すことですが、変数の名前がリテラル文字列として読み取られることは避けてください。これは非常に混乱しています、Pythonが恋しい!
完全を期すために、これらすべて( ")も最後の$(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( ')には特別な意味はありません。逆も同様です。
a="that's Nice"; echo "$a" # result: that's Nice
a='that "is Nice'; echo "$a" # result: that "is Nice
呼び出しステートメントは次のように編集できます。
CALL="$(echo date -d \"$ENDTIME\" +\'%H:%M:%S\')"
\
を使用して、文字をエスケープできます"
および'
。今echo $CALL
は次のように出力されます:
date -d "22:46:37 today + 10 seconds" +'%H:%M:%S'
次のように、一重引用符insideを二重引用符で囲んだ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