シェルスクリプトは関数から返されたコマンドを実行しません。

シェルスクリプトは関数から返されたコマンドを実行しません。

誰かがこれがうまくいかない理由を説明できますか?期間タイムスタンプから秒を返す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

関連情報