誰かがこれがうまくいかない理由を説明できますか?期間タイムスタンプから秒を返すbash関数があります。
シェルスクリプト機能
seconds() {
result=$(echo "\"1970-01-01 $1+0\"")
echo date +%s -d $result
}
通話機能
seconds 00:00:02.00 #works
date +%s -d "1970-01-01 00:00:02.00+0"
この正確なテキストをコピーして動作する端末で実行すると、次のような出力が生成されます。
$(seconds 00:00:02.00) #error
ただし、これはエラーを返します。
date: extra operand ‘00:00:02.00+0"’
ここで問題は何ですか?それとももっと良い方法がありますか?
答え1
あなた使用する必要はありませんecho
ここのどの時点でも。
サブシェルを使用すると、関数の出力が実行されますseconds
。一般的に賢明ではありません今見ているような予期しない動作が発生する可能性があるためです。
代わりに、date
コマンド自体を実行するように関数を単純化してください。
#!/bin/bash
seconds () {
date -d "1970-01-01 $1+0" "+%s"
}
seconds 00:00:02.00
出力:2